交换类排序

一、冒泡排序(Bubble Sort)

1.时间复杂度:O(n2)

2.空间复杂度:O(1)

 1 void BubbleSort(int* a, int num) {
 2     int i, j;
 3     for (i = 1; i <= num - 1; ++i) {
 4         for (j = 1; j <= num - i; ++j) {
 5             if (a[j] > a[j + 1]) {//前后交换
 6                 a[0] = a[j];
 7                 a[j] = a[j + 1];
 8                 a[j + 1] = a[0];
 9             }
10         }
11     }
12 }

二、快速排序(Quick Sort)

1.时间复杂度:O(nlog2n)

2.空间复杂度:O(log2n)

3.实现:

 1 void QuickSort(int* nums, int left, int right){
 2     int i = left, j = right, t = nums[left];
 3     if (i < j){
 4         while (i < j){
 5           while (i < j && nums[j] > t) j--;           //从右边找到第一个小于初始位置的值
 6           nums[i] = nums[j];                          //nums[j]存入初始位置
 7           while (i < j && nums[i] <= t) i++;          //从左边找到第一个大于初始位置的值
 8           nums[j] = nums[i];                          //nums[i]存入nums[j]
 9         }
10         nums[i] = t;                                  //轴枢存入nums[i]
11         QuickSort(nums, left, j - 1);                 //快排轴枢左区间
12         QuickSort(nums, j + 1, right);                //快排轴枢右区间
13     }
14 }

 三、参考资料:

https://blog.csdn.net/HUAI_BI_TONG/article/details/116648066

https://blog.csdn.net/elma_tww/article/details/86164674

posted @ 2022-02-11 00:58  吕辉  阅读(87)  评论(0)    收藏  举报