排序算法总结
排序算法 | 平均时间复杂度 |
---|---|
冒泡排序 | O(n2) |
选择排序 | O(n2) |
插入排序 | O(n2) |
希尔排序 | O(n1.5) |
快速排序 | O(N*logN) |
归并排序 | O(N*logN) |
堆排序 | O(N*logN) |
基数排序 | O(d(n+r)) |
一、冒泡排序(BubbleSort)
- 基本思想: 两个数比较大小,较大的数下沉,较小的数冒起来。
- 过程:
- 比较相邻的两个数据,如果第二个数小,就交换位置。
- 从后向前两两比较,一直到比较最前的两个数据。最终最小数被交换到起始位置,这样第一个最小数的位置就排好了。
- 继续重复上诉过程,依次酱2,3…n-1个最小数排好位置。
3.平均时间复杂度: O(n2)
4.C代码实现:
1 #include <stdio.h>
2 #include <stdbool.h>
3
4 void BubbleSort(int Array_test[], int n){
5
6 int i, j;
7 bool flag;
8 for ( i = n -1; i > 0; --i){
9 flag = false;
10 for ( j = 0; j < i; j ++)
11 if ( Array_test[j] > Array_test[j+1]){
12 int temp = Array_test[j];
13 Array_test[j] = Array_test[j+1];
14 Array_test[j+1] = temp;
15 flag = true;
16 }
17 if (!flag)
18 break;
19 }
20 }
21
22 void main(){
23
24 int i;
25 int Array_test[10] = {23, 46, 37, 4, 18, 33, 80, 75, 28, 10};
26
27 BubbleSort(Array_test, 10);
28 printf("排序后的数组为:\n");
29 for ( i = 0; i < 10; i++)
30 if ( i < 9)
31 printf("%d-", Array_test[i]);
32 else
33 printf("%d\n", Array_test[i]);
34 }
二、选择排序
- 基本思想:
在长度为N的无序数组中,第一次扁你n-1个数,找到最小的数值与第一个元素交换;
低而磁遍历n-2个数,找到最小值与第二个元素交换;
。。。
第n-1次遍历,找到最小的数值与第n-1个元素减缓,完成排序。