- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
排序算法 .ppt
排序算法 快速排序 快速排序方法的基本思想是:从待排序的n个记录中任意选取一个记录Ri(通常选取序列中的第一个记录)作标准,调整序列中各个记录的位置,使排在Ri前面的记录的关键字都小于Ri的关键字,排在Ri后面的记录的关键字都大于Ri的关键字,我们把这样一个过程称作一次快速排序。在第一次快速排序中,确定了所选取的记录Ri最终在序列中的排列位置,同时也把剩余的记录分成了两个子序列。对两个子序列分别进行快速排序,又确定了两个记录在序列中应处的位置,并将剩余的记录分成了四个子序列,如此重复下去,当各个子序列的长度为1时,全部记录排序完毕。 void quicksort(int a[],int s,int t) { int i=s,j=t,temp; if(st) { temp=a[s]; while(i!=j) { while(jia[j]=temp) j--; a[i]=a[j]; while(ija[i]=temp) i++; a[j]=a[i] } a[i]=temp; quicksort(a,s,i-1); quicksort(a,i+1,t); } } 冒泡法排序 将被排序的记录的关键字垂直排列,首先将第一个记录的关键字与第二个记录的关键字进行比较,若前者大于后者,则交换两个记录,然后比较第二个记录与第三个记录的关键字,依次类推,直到第n-1个记录与第n个记录的关键字比较为止。上述过程称为第一趟起泡排序,其结果使得关键字最大的记录被安排在最后一个记录的位置上。然后进行第二趟起泡排序,对前n-1条记录进行同样的排序,使得关键字次大的记录被安排在第n-1个记录的位置上。 void bubble_sort(int array[],int n) { int i,j,flag,temp; for(i = 0; i n-1; i++) { flag = 1; for(j = 0; j n-i-1; j++) { if(array[j] array[j+1]) { temp = array[j]; array[j] = array[j+1]; 选择法排序 选择排序的做法是:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止。 在选择排序中,每次排序完成一个记录的排序,也就是找到了当前剩余记录中关键字最小的记录的位置,n-1次排序就对n-1个记录进行了排序,此时剩下的一个记录必定是原始序列中关键码最大的,应排在所有记录的后面,因此具有n个记录的序列要做n-1次排序。 void sort(int array[],int n) { // n 为数组元素个数 int i,j,k,temp; // i 为基准位置,j 为当前被扫描元素位置,k 用 于暂存出现的较小的元素的位置 for(i=0;in-1;i++) {k=i;//初始化为基准位置 for(j=i+1;jn;j++) { if (array[j]array[k]) k=j ; // k 始终指示出现的较小的元素的位置 if(k!=i) { temp=array[i]; array[i]=array[k]; array[k]=temp; // 将此趟扫描得到的最小元素与基准互换位置 } } //for } } 插入法排序 假设待排序的记录存放在数组R[0…n-1]中。初始时,R[0]自成1个有序区,无序区为R[1…n-1]。从i=1起直至i= n-1为止,依次将R[i]插入当前的有序区R[0…i-1]中,生成含n个记录的有序区。 通常将一个记录R[i](i=1,2,…,n-1)插入到当前的有序区,使得插入后仍保证该区间里的记录是按关键字有序的操作称第i趟插入排序。 main() { int i,j,a[5]={7,9,4,8,6},temp; for(i=1;i5;i++) { t=a[i]; for(j=i-1;j=0;j++) if(ta[j]) {a[i]=a[j]; a[j]=t;} } for(
文档评论(0)