选择排序
最坏时间复杂度,最佳时间复杂度,平均时间复杂度都是O(n^2)
相比冒泡排序的优势是 每次扫描只保存索引,并不交换,节省了时间。但是冒泡排序可以设置标志位提前结束排序,较于选择排序也节省了时间。
一次性放到终态位置:是
稳定性:稳定;前提是 if ( a[ j ] >= a[ k ] ) k = j; 而不是 if ( a[ j ] >=a[ k ] ) k = j;
1 #include"头文件.h" 2 void SelectSort(int *a, int len) { 3 if (a == null || len < 1) 4 return; 5 int k;//保存最大元素的索引 6 int temp;//swap两个变量的临时变量 7 for (int i = len - 1; i >= 0; --i) { 8 k = 0; 9 for (int j = 0; j <= i; ++j) { 10 if (a[j] > a[k]) 11 k = j; 12 } 13 temp = a[k]; 14 a[k] = a[i]; 15 a[i] = temp; 16 } 17 } 18 int main() { 19 int a[100]; 20 for (int i = 0; i < 100; ++i) { 21 a[i] = 1 + rand() % 500; 22 } 23 printf("排序前的数组:\n"); 24 for (int i = 0; i < 100; ++i) { 25 printf("%4d ", a[i]); 26 if ((i + 1) % 10 == 0) 27 printf("\n"); 28 } 29 printf("\n"); 30 printf("排序后的数组:\n"); 31 SelectSort(a, 100); 32 for (int i = 0; i < 100; ++i) { 33 printf("%4d ", a[i]); 34 if ((i+1) % 10 == 0) 35 printf("\n"); 36 } 37 printf("\n"); 38 system("pause"); 39 return 0; 40 }