选择排序中的两个经典算法:简单选择排序,堆排序。
简单选排:通过n-1次数据元素的比较,从n-i+1个记录中选择最小的数据,并与第i个数据进行交换,它的时间复杂度是O(n^2)。
堆排序:利用堆的特征进行排序,复杂度为O(n*logn)。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int n; 5 6 /* 7 * 选择排序 8 */ 9 void SelectSort(int *array) 10 { 11 int i, j, k, temp; 12 for (i = 0; i < n; i++) 13 { 14 k = i; 15 for (j = i + 1; j < n; j++) 16 { 17 if (array[j] < array[k]) 18 { 19 k = j; 20 } 21 } 22 if (k != i) 23 { 24 temp = array[i]; 25 array[i] = array[k]; 26 array[k] = temp; 27 } 28 } 29 } 30 31 int main() 32 { 33 int i; 34 int *array; 35 printf("请输入数组的大小:"); 36 scanf("%d", &n); 37 array = (int*) malloc(sizeof(int) * n); 38 printf("请输入数据(用空格分隔):"); 39 for (i = 0; i < n; i++) 40 { 41 scanf("%d", &array[i]); 42 } 43 SelectSort(array); 44 printf("排序后为:"); 45 for (i = 0; i < n; i++) 46 { 47 printf("%d ", array[i]); 48 } 49 printf(" "); 50 }