几种常用的排序方法3--选择排序
选择排序
选择排序是一种不稳定的排序方式
选择排序的思想是:n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
选择排序的平均时间复杂度是O(n^2)。
1 void selection_sort(int a[],int size) 2 { 3 int min ; 4 for(int i = 0; i < size - 1; i++) 5 { 6 min = i ; 7 for(int j = i + 1; j < size; j++) 8 { 9 if(a[min] > a[j])//寻找最小的值 10 { 11 min = j; 12 } 13 } 14 if(min != i) 15 {//将最小的值交换到前面 16 int temp = a[i]; 17 a[i] = a[min]; 18 a[min] = temp; 19 } 20 } 21 22 }