付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
白话经典算法之七大排序这是本人在研一上所整理的文档,包括冒泡排序,直接插入排序,直接选择排序,排序,归并排序,快速排序和堆排序这七种常用的排序方法,这些文章不仅使我在考试中取了不错现在整理成形式,希望能对大家有所帮助。白话经典算法之七大排序 一.白话经典算法系列之 冒泡排序的三种实N=N-1,如果N不为0//冒泡排序voidBubbleSort1(inta[],int{inti,for(i=0;i<n;for(j=1;j<n-i;j++)if(a[j-1]>a[j])Swap(a[j-1],}false。明显如果有一趟没有发生交换,说明排序已经//冒泡排序voidBubbleSort2(inta[],int{intj,k;k=flag=true;while{flag=for(j=1;j<k;j++)if(a[j-1]>{}}}
Swap(a[j-1],a[j]);flag=true;//冒泡排序//ByMoreWindows(voidBubbleSort3(inta[],int{intj,k;intflag=while(flag>{k=flag;flag=for(j=1;j<k;j++)if(a[j-1]>{Swap(a[j-1],a[j]);flag=j;}}}二.白话经典算法系列之二直接插入排序的三种实现直接插入排序(InsertionSort)的基本思想是:每次将一个待排序的记录,按其关下面给出严格按照定义书写的代码(由小到大排序voidInsertsort1(inta[],int{inti,j,for(i=1;i<n;{for(j=i-1;j>=0;j--if(a[j]<a[i])if(j!=i-1){inttemp=a[i];for(k=i-1;k>j;k--a[k+1]=a[k+1]=temp;}}}骤合并。即每次a[i]先和前面一个数据a[i-1]比较,如果a[i]>a[i-1]说明a[0…i]也边向前搜索,当有数据a[j]<a[i]时停止并将temp放到a[j+1]处。voidInsertsort2(inta[],int{inti,for(i=1;i<n;i++)if(a[i]<a[i-{inttemp=for(j=i-1;j>=0&&a[j]>temp;j--)a[j+1]=a[j];a[j+1]=}}<=//ByMoreWindows(voidInsertsort3(inta[],int{inti,for(i=1;i<n;for(j=i-1;j>=0&&a[j]>a[j+1];j--Swap(a[j],a[j+}三.白话经典算法系列之 排序的实排序的实质就是分组插入排序,该方法又称缩小增量排序,因1959入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况,效率是n=104938659726132749554第一次gap102 1A,1B,2A,2B等为分组标记,数字相同的表示在同一组,大写字母表示是该组的第几个元((26,4)这样每组排序后就变成了(13,49)(27,38)(49,65)(55,97)(4,26)第二次gap52
第三次gap224第四次gap120排序完成得到数组 void sort1(inta[],int{inti,j,forgapn2;gap0gap //步fori0;igap; //按组排{for(j=i+gap;j<n;j+={if(a[j]<a[j-{inttemp=a[j];intk=j-while(k>=0&&a[k]>{a[k+gap]=a[k];k-=gap;}a[k+gap]=}}}}voidssort2(inta[],int{intj,for(gap=n/2;gap>0;gap/=forjgap;jn; //从数组第gap个元素开ifa[ja[j //每个元素与自己组内的数据进行直接插入排{inttemp=a[j];intk=j-while(k>=0&&a[k]>{a[k+gap]=a[k];k-=gap;}a[k+gap]=}}//ByMoreWindows(voidssort3(inta[],int{inti,j,for(gap=n/2;gap>0;gap/=2)for(i=gap;i<n;i++)for(j=i-gap;j>=0&&a[j]>a[j+gap];j-=gap)Swap(a[j],a[j+gap]);}上对排序步长的说明:F四.白话经典算法系列之四直接选择排序////ByMoreWindows(voidSelectsort(inta[],int{inti,j,nMinIndex;for(i=0;i<n;{nMinIndexi;找最小元素的位置for(j=i+1;j<n;j++)if(a[j]<a[nMinIndex])nMinIndex=j;Swap(a[i],a[nMinIndex]);//将这个元素放到无序区的开}}inlinevoidSwap(int&a,int&b){intc=a=b=}inlinevoidSwap1(int&a,int{a^=b^=a;a^=}inti=6;Swap1(i,i);inlinevoidSwap(int&a,int{intc=a=b=}inlinevoidSwap1(int&a,int&b){if(a!={a^=b^=a;a^=}}五.白话经典算法系列之 归并排序的实(DivideandConquer)voidMemeryArray(inta[],intn,intb[],intm,int{inti,j,i=j=k=while(i<n&&j<{if(a[i]<c[k++]=}
c[k++]=while(i<c[k++]=while(j<c[k++]=}A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,////ByMoreWindows(boolMergeSort(inta[],int{int*pTempArray=newint[n];if(p==NULL)returnmergesort(a,0,n-1,pTempArray);delete[]pTempArray;return}voidmergesort(inta[],intfirst,intlast,int{if(first<{intmid=(first+last)/mergesort(a,first,mid,temp); mergesort(a,mid+1,last,temp);//右边有序mergearray(afirstmid,last,temp}}voidmergearray(intaintfirst,intmidintlast,inttemp[]){inti=first,j=mid+1;intm=mid,n=last;intk=0;while(i<=m&&j<={if(a[i]<temp[k++]=}
temp[k++]=while(i<=temp[k++]=while(j<=temp[k++]=for(i=0;i<k;i++)a[first+i]=temp[i];}O(N*logN)的几种排序方法(快速排序,归并排序,排序,堆排序)也是效六.IT公司都喜欢考这个,还有大大小的程序方快速排序是C.R.A.Hoare于1962年一种划分交换排序。它采用了一种分码会有帮助01234567896初始时,i= j= X=a[i]=由于已经将a[0]中的数保存到X中,可以理解成在数组a[0]上挖了个坑,可以将j开始向前找一个X小或等X的数。j=8,符合条件,将a[8]挖出再填a[0]中。a[0]=a[8]i++;a[0]就被搞定了,但又形成了一个新a[8],这怎么办了?简单,再找数a[8]这个坑。这次i开始向后找一个大于X的数,当i=3,符合条件,将a[3]挖出再填到上一个坑中a[8]=a[3];j01234567896i= j= 再重复上面的步骤,先从后向前找,再从前向后找012345678961.iLjR;a[i]intAdjustArray(intsintlintr返回调整后基准数的位{inti=l,j=intxs[ls[l]即s[i]就是第一个坑while(i<j){从右向左找小于x的数来填s[i]while(i<j&&s[j]>=x)if(i<{s[i]s[j将s[j]填到s[i]中,s[j]就形成了一个新的坑}从左向右找大于或等于x的数来填s[j]while(i<j&&s[i]<x)if(i<{s[j]s[i将s[i]填到s[j]中,s[i]就形成了一个新的坑}}s[i]=x;return}voidquick_sort1(ints[],intl,int{if(l<{intiAdjustArray(sl,r);//先成挖坑填数法调整s[]quick_sort1(s,l,i-1);//递归调用quick_sort1(s,i+1,}}//ByMoreWindows(voidquick_sort(ints[],intl,int{if(l<{//Swap(s[ls[(lr2将中间的这个数和第一个数交换参见注1inti=l,j=r,x=s[l];while(i<{while(ij&&s[jx)//从右向左找第一个小于x的if(i<s[i++]=while(ij&&s[ix)//从左向右找第一个大于等于x的if(i<s[j--]=}s[i]=quick_sort(sli1);//quick_sort(s,i+1,}}七.白话经典算法系列之七堆与堆排二叉堆的定义每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:堆的一般都用数组来表示堆,i结点的父结点下标就为(i12。它的左右子结点下2*i+12*i+20个结点左右子结点下标分别为12。堆的操作——插入删除类似于直接插入排序中将一个数据并入到有序区间中,对照《白话经典算法系列 新加入i结点其父结点为(i1)2voidMinHeapFixup(inta[],inti){intj,temp=j=(i-1)/2; while(j>=0){if(a[j]<=temp)a[i]= i=j=(i-1)/}a[i]=}voidMinHeapFixup(inta[],int{for(intj=(i-1)/2;j>=0&&a[i]>a[j];i=j,j=(i-1)/2)Swap(a[i],a[j]);}//在最小堆中加入新的数据voidMinHeapAddNumber(inta[],intn,int{a[n]=nNum;MinHeapFixup(a,n);} 从i节点开始调整,n0i2*i+1,2*i+2voidMinHeapFixdown(inta[],inti,intn){intj,temp=a[i];j=2*i+1;while(j<{ifj1n&&a[j1]a[j在左右孩子中找最小的if(a[j]>=temp)a[i]= i=j=2*i+}a[i]=}voidMinHeapDeleteNumber(inta[],int{Swap(a[0],a[n-1]);MinHeapFixdown(a,0,n-1);}20,6065,449A[4]=50开始向下调整就可以了。然后A[3]=30,A[217,A[1]=12,A[0]=9分别作一次向下调整操作就可以voidMakeMinHeap(inta[],int{for(inti=n/2-1;i>=0;i--)MinHeapFixdown(a,i,}至此,堆的操作就全部完成了(1),再来看下如何用堆这种数据结构来进行排堆排序A[0]A[n1]交换,再对堆,重复这样的操作直到A[0]与A[1]交换。由于每次都是将最小的数据并入到后面的有序区间,故操作完成后整个数组就有序了。有点类似于直接选择排序。//–>//ByMoreWindows(vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境电商亚马逊运营工程师考试试卷及答案
- 2025年中国能源建设集团陕西省电力设计院有限公司招聘笔试历年参考题库附带答案详解
- 2025山西焦煤“‘企’聚人才‘职’等你来”省属企业专场招聘会招聘300人笔试历年参考题库附带答案详解
- 2025山东潍坊市天成水利建设有限公司招聘30人笔试历年参考题库附带答案详解
- 2025宝鸡赛威重型机床制造有限公司招聘(53人)笔试历年参考题库附带答案详解
- 2025宁都县源盛公用事业投资发展有限公司招聘员工9人笔试历年参考题库附带答案详解
- 2025四川雅安市天全县劳务派遣有限责任公司招聘森林管护员16人笔试历年参考题库附带答案详解
- 2025四川绵阳九洲投资控股集团有限公司软件与数据智能军团招聘开发工程师等岗位18人笔试历年参考题库附带答案详解
- 2025四川内江高新投资有限责任公司招聘高层次高技能人才2人笔试历年参考题库附带答案详解
- 2025华能核电开发有限公司所属基层企业福建宁德社会招聘40人笔试历年参考题库附带答案详解
- 人工智能教育模式在初中历史教学中的应用与实践教学研究课题报告
- 2025年海淀卫校新生面试题库及答案
- 69-集团战略管理体系设计方案:构建高效执行力与行业领先战略管理能力的全面规划与实施指南
- DB4205∕T 89-2021 小流域暴雨洪水经验公式法洪峰流量计算规范
- 徐矿集团历年校园招聘笔试必刷题
- 五四表彰大会通知
- 《中华人民共和国环境保护法》测试题库及答案
- 中考专项复习魔壶的秘密反应后溶液中溶质成分的探究
- 铁路运输企业固定资产全生命周期管理创新研究
- TCANSI1742024造修船企业安全生产标准化基本要求
- 电梯配件储备方案(3篇)
评论
0/150
提交评论