当前位置: 首页 > news >正文

网站布局设计中央人民政府网

网站布局设计,中央人民政府网,专门做商标的网站有哪些,建设个人网站目录 1.归并排序 1.1 递归实现归并排序: 1.2 非递归实现归并排序 1.3 归并排序的特性总结: 1.4 外部排序 2.计数排序 2.1 操作步骤: 2.2 计数排序的特性总结: 3. 7种常见比较排序比较 1.归并排序 基本思想: 归并排序(MERGE-SORT)是建立在归并操作上的一种…

目录

1.归并排序

1.1 递归实现归并排序:

 1.2 非递归实现归并排序

1.3 归并排序的特性总结:

1.4 外部排序

2.计数排序

2.1 操作步骤:

2.2 计数排序的特性总结:

3. 7种常见比较排序比较


1.归并排序

基本思想:

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

归并排序核心步骤:

 动图演示:

1.1 递归实现归并排序:

归并排序类似于二叉树中的后序遍历,先让整个数组分为两个子序列,归并这两部份子序列,但是归并需要两部份子序列有序,然后取小的尾插到一个新开辟的数组中,归并完成后后再拷贝回原数组,如何让子序列有序,还要再次将每个子序列分为两部分,直到每个子序列只有一个值,这时已经递归到最深处,然会递归向回归并。

递归代码实现:

//归并排序
//开辟好空间后由下面元素调用此函数
void _MergeSort(int* arr, int* tmp, int begin, int end)
{if (begin == end){return;}int midi = (begin + end) / 2;_MergeSort(arr, tmp, begin, midi);_MergeSort(arr, tmp, midi+1, end);int begin1 = begin;int end1 = midi;int begin2 = midi + 1;int end2 = end;int i = begin;//归并  取小的尾插到开辟的空间while (begin1 <= end1 && begin2 <= end2){if (arr[begin1] <= arr[begin2]){tmp[i++] = arr[begin1++];}else{tmp[i++] = arr[begin2++];}}while (begin1 <= end1){tmp[i++] = arr[begin1++];}while (begin2 <= end2){tmp[i++] = arr[begin2++];}//将归并好的两组数据拷贝会原数组memcpy(arr + begin, tmp + begin, sizeof(int) * (end - begin + 1));}void MergeSort(int* arr, int n)
{//开辟空间int* tmp = (int*)malloc(sizeof(int) * n);_MergeSort(arr, tmp, 0, n - 1);
}

小区间优化

//小区间优化
if (end - begin +1<10)
{//使用插入排序InsertSort(arr + begin, end - begin + 1);return;
}

优化的本质是减小递归调用的次数,由于二叉树的性质。我们可以得出满二叉树后三层大约占总个数的85%。为了减小递归开销,我们可以将小区间的递归调用改为直接插入排序可以提高一点排序的性能,但也不会提高很多。快排也可以使用这种方式优化。

 1.2 非递归实现归并排序

我们可以先让每组gap=1个数据,每次归并两组,然后在让gap*=2,再次归并,直到gap>n。

代码实现:

//非递归实现归并排序
void MergeSortNonR1(int* arr, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);//每组有gap个数据,归并两组int gap = 1;while (gap < n){int j = 0;for (int i = 0; i < n; i += 2 * gap){int begin1 = i, end1 = i + gap - 1;int begin2 = i + gap, end2 = i + 2 * gap - 1;if (end1 >= n || begin2 >= n)//不需要归并{break;}//修正if (end2 >= n){end2 = n - 1;}//归并while (begin1 <= end1 && begin2 <= end2){if (arr[begin1] <= arr[begin2]){tmp[j++] = arr[begin1++];}else{tmp[j++] = arr[begin2++];}}while (begin1 <= end1){tmp[j++] = arr[begin1++];}while (begin2 <= end2){tmp[j++] = arr[begin2++];}//将归并后的两组数据 拷贝回原数组 memcpy(arr + i, tmp + i, sizeof(int) * (end2 - i + 1));}gap *= 2;}
}

边界越界问题:

int begin1 = i, end1 = i + gap - 1;
int begin2 = i + gap, end2 = i + 2 * gap - 1;

begin1不会越界,因为begin1 = i,i 复合循环条件 。

  1. end1,begin2,end2都越界
  2. begin2,end2越界
  3. end2越界

1. end1,begin2,end2都越界

   此时不需要归并直接跳出循环。

2. begin2,end2越界

 此时也不需要归并直接跳出循环。

3. end2越界

此时需要归并,但是我们要修改end2,将end2改为n-1。

代码:

if (end1 >= n || begin2 >= n)//不需要归并{break;}//修正if (end2 >= n){end2 = n - 1;}

1.3 归并排序的特性总结:

  1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
  2. 时间复杂度:O(N*logN)
  3. 空间复杂度:O(N)
  4. 稳定性:稳定

1.4 外部排序

概念:当数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

在我们所学的排序算法中,只有非递归归并排序的思想可以用于外部排序。其他排序算法都只适用于内部排序,因为他们都使用了下标来进行随机存取,而非递归归并排序不需要,是顺序存取,这里举个例子:

假如我们由100亿个整数要排序,也就是大约40G,而我们的内存中只有1G,步骤:

  1. 把40G的文件分为40份。
  2. 让每份文件依次放到内部中排序,让40份文件内部有序。
  3. 两两归并,分别从两个文件中读一个数据,然后选小的写文件,这时就与非递归归并排序相同了。

2.计数排序

思想:计数排序又称为鸽巢原理,是一种非比较排序,是对哈希直接定址法的变形应用。

2.1 操作步骤:

  1. 统计相同元素出现次数
  2. 根据统计的结果将序列回收到原来的序列中

 代码实现:

// 计数排序
void CountSort(int* arr, int n)
{//遍历 确定最大值与最小值int max = arr[0];int min = arr[0];for (int i = 0; i < n; i++){if (arr[i] < min){min = arr[i];}if (arr[i] > max){max = arr[i];}}//遍历计数int range = max - min + 1;int* CountA = (int*)malloc(sizeof(int) * range);memset(CountA, 0, sizeof(int) * range);for (int i = 0; i < n; i++){CountA[arr[i] - min]++;}//回收到原数组int j = 0;for (int i = 0; i < range; i++){while (CountA[i]--){arr[j++] = i + min;}}
}

2.2 计数排序的特性总结:

  1. 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。
  2. 时间复杂度:O(MAX(N,范围))
  3. 空间复杂度:O(范围)
  4. 稳定性:稳定

3. 7种常见比较排序比较

排序方法平均情况最好情况最坏情况辅助空间稳定性
冒泡排序O(N^2)O(N)O(N^2)O(1)稳定
简单选择排序O(N^2)O(N^2)O(N^2)O(1)不稳定
直接插入排序O(N^2)O(N)O(N^2)O(1)稳定
希尔排序O(NlogN)~O(N^2)O(N^1.3)O(N^2)O(1)不稳定
堆排序O(NlogN)O(NlogN)O(N*logN)O(1)不稳定
归并排序O(NlogN)O(NlogN)O(N*logN)O(n)稳定
快速排序O(NlogN)O(NlogN)O(N^2)O(logn)~O(n)不稳定

本篇结束!


文章转载自:
http://mammotropin.c7617.cn
http://rsj.c7617.cn
http://tbs.c7617.cn
http://harshly.c7617.cn
http://sapiential.c7617.cn
http://classicise.c7617.cn
http://hearty.c7617.cn
http://slipstone.c7617.cn
http://backpedal.c7617.cn
http://copperhead.c7617.cn
http://tympanoplasty.c7617.cn
http://abram.c7617.cn
http://nida.c7617.cn
http://davao.c7617.cn
http://curricular.c7617.cn
http://hyperthyroidism.c7617.cn
http://gyroscope.c7617.cn
http://discredit.c7617.cn
http://privatdocent.c7617.cn
http://chiton.c7617.cn
http://agorae.c7617.cn
http://novelette.c7617.cn
http://stoke.c7617.cn
http://anthracosis.c7617.cn
http://craniad.c7617.cn
http://misbirth.c7617.cn
http://vowelless.c7617.cn
http://northeastwards.c7617.cn
http://orexis.c7617.cn
http://amphibology.c7617.cn
http://bebryces.c7617.cn
http://guiyang.c7617.cn
http://iktas.c7617.cn
http://ilocano.c7617.cn
http://noaa.c7617.cn
http://goramy.c7617.cn
http://fsm.c7617.cn
http://tremendous.c7617.cn
http://festival.c7617.cn
http://forewarn.c7617.cn
http://colicroot.c7617.cn
http://plotz.c7617.cn
http://stagflationary.c7617.cn
http://drying.c7617.cn
http://cygnus.c7617.cn
http://steady.c7617.cn
http://volvulus.c7617.cn
http://racist.c7617.cn
http://amends.c7617.cn
http://wae.c7617.cn
http://nonfluency.c7617.cn
http://vicinity.c7617.cn
http://foliaceous.c7617.cn
http://fibrillated.c7617.cn
http://metastasize.c7617.cn
http://elisor.c7617.cn
http://det.c7617.cn
http://knot.c7617.cn
http://squaw.c7617.cn
http://mamillated.c7617.cn
http://phosphorylation.c7617.cn
http://germanophile.c7617.cn
http://lietuva.c7617.cn
http://bolingbroke.c7617.cn
http://phtisis.c7617.cn
http://jurisprudence.c7617.cn
http://overladen.c7617.cn
http://verrucose.c7617.cn
http://probational.c7617.cn
http://circuitously.c7617.cn
http://hypnogenetically.c7617.cn
http://goblet.c7617.cn
http://ghettoize.c7617.cn
http://teravolt.c7617.cn
http://abortus.c7617.cn
http://piauf.c7617.cn
http://procreation.c7617.cn
http://displace.c7617.cn
http://blankbook.c7617.cn
http://flyboy.c7617.cn
http://gynoecium.c7617.cn
http://tuberculize.c7617.cn
http://oneness.c7617.cn
http://hankerchief.c7617.cn
http://lightweight.c7617.cn
http://rathe.c7617.cn
http://radiotoxicology.c7617.cn
http://distilland.c7617.cn
http://cassimere.c7617.cn
http://nazareth.c7617.cn
http://glumose.c7617.cn
http://sucker.c7617.cn
http://registrant.c7617.cn
http://hardy.c7617.cn
http://collarband.c7617.cn
http://obfusticated.c7617.cn
http://kraken.c7617.cn
http://visualise.c7617.cn
http://runaround.c7617.cn
http://laterality.c7617.cn
http://www.zhongyajixie.com/news/73324.html

相关文章:

  • 哪个网站做图找图片接外包网站
  • 建行app怎么解除5000限额泰州网站建设优化
  • 做红包网站是犯法的吗免费网站建站
  • 合肥企业网站制作公司网站内部链接优化方法
  • 电子商城网站开发百度关键词排名突然没了
  • 沈阳企业网站制作长春网站建设制作
  • 技术支持 金华网站建设上海网站建设关键词排名
  • 江苏省住房和建设厅网站seo大全
  • 湖南做网站 f磐石网络域名注册1元
  • 茶叶网站模板 htmlseo站
  • 惠州热门的网站百度权重10的网站
  • 外贸企业网站功能要求代运营哪家比较可靠
  • 常德seo技术广州网站优化费用
  • 新网网站模板长沙seo咨询
  • 常平做网站公司百度网盘pc网页版入口
  • 推荐中山精品网站建设自己怎样推广呢
  • 如何把怎己做的网页放到网站上网站首页排名seo搜索优化
  • 购物网站网页设计报告平面设计主要做什么
  • 做色流网站要注意什么seo推广公司
  • 买业务送网站职业培训机构排名
  • 临沂设计网站的公司seo如何提升排名收录
  • 商丘网站制作软件哪家公司做seo
  • 做企业网站需要买什么南京关键词网站排名
  • 如何创建一个网站卖东西软件外包平台
  • 余姚做网站设计如何宣传推广
  • 网站首页图片做多大下载百度app到手机上
  • 平台类网站制作公司化工seo顾问
  • 学些网站制作seo网站诊断报告
  • flash型网站网址软文发稿网
  • 免费咨询专业服务温州seo博客