数据结构排序-选择排序

选择排序中的两个经典算法:简单选择排序,堆排序。

简单选排:通过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 }
原文地址:https://www.cnblogs.com/niceforbear/p/4534553.html