C语言学习交流群:648422161。志同道合的小伙伴可以进群交流哦!
对于选择排序,咱们首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大或者最小的。此时就要利用3个变量表示元素的下标。一个表示当前,一个表示找到的最大或者最小的下标,一个用于存放每次循环中最大值的下标。在掌握了程序的基本思想之后,再进行排序。找到最大的下标后赋给每次除非的那个最大的下标。找到之后判断所假设的当前值是否为此次循环的最大值,如果不是,就交换最大 与当前的值,从而将数组以一定的顺序排放。其实 简而言之就是每次找到最大的或者最小的放在前面,当然了排过的位置就不用多次排了
初始的一组数
45 10 5 60 9
找到最小的 5,交换位置
5 10 45 60 9
除去排好的位置接着往后
5 9 45 60 10
以此类推直到排好。
下面贴出代码
void selectSort(int data[],int length){
for (int i = 0; i < length; i++)
{
int k=i;//指向当前下标i
//找最小值的坐标
for (int j = i+1; j < length; j++)
{
//如果当前值大于后一个值则k指向新下标
if (data[k]>data[j])
{
k=j;
}
}
//如果不等于当前下标i,交换位置
if (k!=i)
{
//交换位置
swap(&data[k],&data[i]);
}
}
}
排序方法 平均时间 最坏情况 辅助存储 是否稳定
选择排序 O(n^2) O(n^2) O(1) 不稳定