如何用织梦搭建一个论坛网站,在黑河地区进行定制开发?
摘要:织梦可以做论坛网站,黑河做网站的,英国做电商网站,网站建设基础流程摘要本章代码gitee仓库:排序 文章目录 🎃0. 思维导图🧨1. 插入排序✨1
织梦可以做论坛网站,黑河做网站的,英国做电商网站,网站建设基础流程摘要本章代码gitee仓库#xff1a;排序 文章目录 #x1f383;0. 思维导图#x1f9e8;1. 插入排序✨1.1 直接插入排序✨1.2 希尔排序 #x1f38a;2. 选择排序#x1f38b;2.1 直接选择排序#x1f38b;2.2 堆排序 #x1f38f;3. 交换排序#x1f390;3.1 冒泡排序#… 本章代码gitee仓库排序 文章目录 0. 思维导图1. 插入排序✨1.1 直接插入排序✨1.2 希尔排序 2. 选择排序2.1 直接选择排序2.2 堆排序 3. 交换排序3.1 冒泡排序3.2 快速排序hoare版本挖坑法前后指针小区间优化非递归 4. 归并排序4.1 递归4.2 非递归 5. 性能测试5.1 1w数据5.2 10w数据5.3 100w数据5.4 1000w数据5.5 1亿数据 0. 思维导图 1. 插入排序 ✨1.1 直接插入排序
我们日常打扑克牌摸牌让后将牌按顺序插入好这其实就是插入排序的过程打小插入排序的思想就植入我们的脑海
第一张牌不用管直接拿在手里之后的牌按照大小再一个一个插入即可
//直接插入排序
void InsertSort(int* a, int n)
{//第一张牌不用排所以直接从下标1开始走for (int i 1; i n; i){int end i - 1;int tmp a[i];while (end 0){if (a[end] tmp){//往后挪数据a[end 1] a[end];end--;}elsebreak;}//直接break出来 或者 end -1a[end 1] tmp;}
}直接插入排序特性 越接近有序效率越高(不用那么多次挪动数据) 时间复杂度O(N2) 逆序最坏O(N2)有序最好O(N) 空间复杂度O(1) 稳定性稳定 ✨1.2 希尔排序
希尔排序是基于直接插入排序的一种优化将数据分为gap组对每组进行排序然后再缩小间隔知道gap为1的时候该序列为有序 //希尔排序
void ShellSort(int* a, int n)
{int gap n;while (gap 1){//最后一次gap一定要是1gap gap / 3 1;//分组插入排序 预排序for (int i 0; i n - gap; i){int end i;int tmp a[i gap];while (end 0){if (a[end] tmp){a[end gap] a[end];end - gap;}elsebreak;}a[end gap] tmp;}}
}希尔排序特性 希尔排序有2层循环一个是gap的逐渐缩小一个是分为gap组之后的插入排序我们一般以为时间复杂度为**O(N*logN)**这个量级。但其实这其中的N一直是在变化的可理解为先上升后下降 所以这个量级是略大于N*logN查阅资料可得知希尔排序的时间复杂度大概为O(N1.3~2) 稳定性不稳定 2. 选择排序
还是以打扑克来举例有时候我们感觉一张一张摸牌十分费时间所以就指定一个人来发牌发完之后我们将这一把牌拿到手中再开始理牌 2.1 直接选择排序
这个选择排序每次都是趟都是选出最小的数我们可以在此基础上做出优化每次选出2个数即最小值和最大值
//选择排序
void SelectSort(int* a, int n)
{int left 0;int right n - 1;while (left right){int mini left;int maxi left;for (int i left 1; i right; i){if (a[i] a[mini]){mini i;}if (a[i] a[maxi]){maxi i;}}Swap(a[left], a[mini]);//数据修正if (a[left] a[maxi]){maxi mini;}Swap(a[right], a[maxi]);left;right--;}
}直接选择排序特性 不考虑序列的有序性每次都找出最小最大值效率较低 时间复杂度O(N2) 最好情况O(N2) 最坏情况O(N2) 空间复杂度O(1) 稳定性不稳定 2.2 堆排序
堆排序也是选择排序的一种只不过没有直接选择排序那么朴实堆排序有一些“华丽”的技巧。
