选择排序的定义
选择排序(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十个数字时,运行结果如下