- 选择排序的基本思想:
对n个记录进行扫描,选择最小的记录将其输出,接着在剩下的n-1个记录中扫描,选择最小的记录将其输出,……不断重复这个过程,直到剩下最后一个记录为止。
1 //1.简单选择排序 2 void selectSort(int a[],int num) 3 { 4 int min=0,temp=0;//记录最小数对应的下标 5 for(int i=0;i<num-1;i++) 6 { 7 min=i; 8 for (int j=i+1;j<num;j++) 9 { 10 if (a[min]>a[j]) 11 { 12 min=j; 13 } 14 } 15 if (min!=i) 16 { 17 temp=a[i]; 18 a[i]=a[min]; 19 a[min]=temp; 20 } 21 } 22 } 23 24 25 int main() 26 { 27 int array[9]={0}; 28 srand(time(NULL)); 29 for (int i=0;i<9;i++) 30 { 31 array[i]=rand()%100; //产生0-99的随机数 32 } 33 cout<<"排序之前的数组 "; 34 print(array,9); 35 selectSort(array,9); 36 cout<<"排序之后的数组 "; 37 print(array,9); 38 39 system("pause"); 40 return 0; 41 }
运行结果:
2.时间复杂度计算
第i趟需要进行n-i次比较,因此比较次数为n(n-1)/2. 交换次数,最好交换0次,最坏交换次数为n-1次。 最终的排序次数是比较和交换次数之和。因此,最终的总时间复杂度仍未为(n2)。