2024-09-01
课程学习
00

起泡排序

https://www.bilibili.com/video/av49361421?p=75

初始版本时间复杂度O(n^2)。

改进:考虑到向量中的前段和后段是不是已经是有序的。前段有的话就不再继续排序,后段有的话就把hi点放到前段最大值那里。

在这里插入图片描述

算法是否稳定?

在这里插入图片描述

归并排序

https://www.bilibili.com/video/av18980253/

时间复杂度O(nlogn)。

先分,再merge归并。分而治之的算法。

在这里插入图片描述

C代码实现:

c
#include <stdio.h> void merge_sort_recursive(int arr[], int reg[], int start, int end) { if (start >= end) return; int len = end - start, mid = (len >> 1) + start; int start1 = start, end1 = mid; int start2 = mid + 1, end2 = end; merge_sort_recursive(arr, reg, start1, end1); merge_sort_recursive(arr, reg, start2, end2); int k = start; while (start1 <= end1 && start2 <= end2) reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++]; while (start1 <= end1) reg[k++] = arr[start1++]; while (start2 <= end2) reg[k++] = arr[start2++]; for (k = start; k <= end; k++) arr[k] = reg[k]; } void merge_sort(int arr[], const int len) { int reg[len]; merge_sort_recursive(arr, reg, 0, len - 1); } int main() { int a[]={1,2,3,3,2,4,5,6,7,8,3,4,5,6,22,33,44,22,11}; int i= 19; merge_sort(a, i); while(i--) printf("%d ",a[i]); return 0; }
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!