c语言选择排序

选择排序思想:

反复地从未排序部分选择最小(或最大)的元素,将其放到已排序部分的末尾;

首先用一个变量min来保存数组第一个元素的下标,然后用这个下标访问这个元素,将这个元素与它后面的元素相比较,如果后面的元素比它小,就交换这两个值;(从小到大)接着让min保存第二个元素的下标,然后再把第二个元素与后面的元素比较,再把最小元素的与第二个位置的元素交换,直到进行到倒数第二个元素就结束。

cpp 复制代码
#include <stdio.h>
void select_sort(int *p,int n) //从第一个数开始,把后面每一个与第一个比较,将最小的数放在第一个,然后再让第二个数与后面的相比,直到排完
{
    int i, j, min;
    for(i=0;i<n-1;i++)  //循环判断比较的数为n-1个,最后一个不用比较
    {
        min = i;
        for(j=i+1;j<n;j++)
        {
            if(p[j]<p[min])     //从小到大排,交换
            {
                int temp = p[min];
                p[min] = p[j];
                p[j] = temp;
            }
        }
    }
}
void selectSort(int arr[],int n) //从大到小
{
    int i, j, max;
    for(i=0;i<n-1;i++)
    {
        max = i;     //每次循环都让max和i相同
        for(j=i+1;j<n;j++)
            if(arr[max]<arr[j])  //max下标对应的值与后面的数作比较,把最大数的下标给max
                max = j;
        if(max != i)       //判断下标i与max是否相同,不相同就交换下标中的值
        {
            int temp = arr[i];
            arr[i] = arr[max];
            arr[max] = temp;
        }
    }
}
int main(int argc, char *argv[])
{
    int arr[] = {64, 25, 12, 22, 11, 35};
    int n = sizeof(arr)/sizeof(arr[0]);
    selectSort(arr, n);
    printf("Sorted array: \n");
    for (int i=0; i < n; i++)
        printf("%d ", arr[i]);
    return 0;
}

解析:void select_sort(int *p,int n),对于这个函数使用的方法就是比较元素的大小,如果有比arrmin更小的就进行位置交换,循环进行到最后就能得到从小到大排序的数组元素。

void selectSort(int arr\[\],int n),这个函数形参为数组,在这里它会把数组当做指针,接受实参数组的首地址,这里面使用的也是选择排序的思想,但是在比较的时候并没有直接交换内容,而是将对应的下标给了变量max,之后再来判断max与循环一开始的i是否相同,如果不同就交换位置,这样也能实现排序。

相关推荐
mCell4 小时前
Lua 编程入门:从基础语法到元表
javascript·算法·lua
wuyk5556 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无6 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
wp123_16 小时前
IPX8 防水 Type‑C连接器:安费诺 124018792112A 与 TONEVEE TY48087‑24A 技术梳理
c语言·开发语言
不会代码的小猴7 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
203号居民8 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真11 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
地平线开发者12 小时前
量化为什么会有损失:从量化误差到精度下降
算法
手写码匠12 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 会话管理与上下文工程实战:让智能体“记住该记住的,忘掉该忘掉的“
人工智能·深度学习·算法·aigc