关于选择排序的C语言实现方法

选择排序的定义

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的时间复杂度始终为O(n2),这使得它在面对大数据量时效率较低。尽管它在最坏、平均和最好的情况下都保持一致的效率表现,但因为其嵌套两次循环,它在实际应用中的性能往往低于其他更高效的排序算法,如快速排序或归并排序。

过程演示:

代码实现

以对一个拥有10个元素的整形数组为例,对其进行从小到大排序,排序过程中,首先会在数组中找到最小元素,并将其与第一个元素交换位置。然后,接下来的排序会忽略已经排好序的第一个元素,从第二个位置开始继续找最小值,并将它与第二个位置的元素交换。这一过程重复进行,直至所有元素都放到了最终位置。

以下是代码示例

#include<stdio.h>
//编写一个函数以实现排序功能,其中传入参数分别为待排序的数组地址与其长度
void selec_array(int a[], int length) {
    for (int i = 0; i < length - 1; i++) {
        int min = i;  // 记录最小值的位置,第一个元素默认最小
        for (int j = i + 1; j < length; j++) {
            if (a[j] < a[min]) {  // 找到目前最小值
                min = j;  // 记录最小值的位置
            }
        }
        // 交换两个变量
        if (min != i) {
            int temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
}

//主函数
int main()
{
    int length = 10; 
    int num[length];  //初始化一个长度为10的整形数组
    for (int i = 0; i < length; i++) {  //通过for循环接受10个数字存入数组中
        scanf("%d", &num[i]);
    }
    selec_array(&num, length); //调用上方编写的选择排序函数对数组进行排序
    for (int i = 0; i < length; i++) {  //通过for将排序好的数组输出
        printf("%d ", num[i]);
    }
    return 0;
}

通过更改主函数的中length的值便可以实现对任何长度的整形数组进行排序

当输入26 96 84 25 36 1 28 52 102 75十个数字时,运行结果如下

上一篇
下一篇