排序算法做个复习总结
(待更新)
基本排序算法
排序法 |
最差时间分析 |
平均时间复杂度 |
稳定度 |
空间复杂度 |
冒泡排序 |
O(n2) |
O(n2) |
稳定 |
O(1) |
选择排序 |
O(n2) |
O(n2) |
稳定 |
O(1) |
快速排序 |
O(n2) |
O(n*log2n) |
不稳定 |
O(log2n)~O(n) |
二叉树排序 |
O(n2) |
O(n*log2n) |
不稳定 |
O(n) |
插入排序 |
O(n2) |
O(n2) |
稳定 |
O(1) |
堆排序 |
O(n*log2n) |
O(n*log2n) |
不稳定 |
O(1) |
希尔排序 |
O |
O |
不稳定 |
O(1) |
归并排序 |
O(nlog n) |
|
|
|
选择排序和冒泡排序相比较,比较次数基本一致.交换次数少了.
选择排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<iostream> using namespace std; int main() { int nums[] = { 55, 18 , 33 , 22 , 6, 23 }; int numslen = sizeof(nums) / sizeof(int); int temp = 0; int min = nums[0]; int minIndex = 0; for(int i = 0 ; i < numslen - 1; i++){ for (int j = i + 1; j < numslen - i; j++){ if(nums[j] > min){ min = nums[j]; minIndex = j; } } if(minIndex > i){ temp = nums[minIndex]; nums[minIndex] = nums[i]; nums[i] = temp; } cout << "选择排序后:" << endl; for(int i = 0 ; i < numslen ; i++){ cout << nums2[i] << "\t"; } return 0; }
|
冒泡排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include<iostream> using namespace std; int main() { int nums2[] = { 55, 18 , 33 , 22 , 6, 23 }; int numslen = sizeof(nums) / sizeof(int); int temp2 = 0; for(int i = 0 ; i < numslen - 1; i++){ for (int j = 0; j < numslen - i - 1; j++){ if(nums2[j] > nums2[j+1]){ temp2 = nums2[j]; nums2[j] = nums2[j+1]; nums2[j+1] = temp2; } } } cout << "冒泡排序后:" << endl; for(int i = 0 ; i < numslen ; i++){ cout << nums2[i] << "\t"; } return 0; }
|