直接插入排序_折半插入_2路插入_希尔排序.doc

直接插入排序_折半插入_2路插入_希尔排序.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
直接插入排序_折半插入_2路插入_希尔排序

#include stdio.h #include stdlib.h #include iostream.h void isort(int a[],int len) { int i,j,insert; int index; for(i=1;ilen;i++) { index=i-1; insert=a[i]; while(index=0inserta[index]) { a[index+1]=a[index]; index--; } a[index+1]=insert; } } void halfinsert(int a[],int len) { int i,j; int low=0,high=0,mid; int insert; for(i=1;ilen;i++) { low=0;high=i-1; int insert; insert=a[i]; while(low=high) { mid=(low+high)/2; if(insert=a[mid]) low=mid+1; else high=mid-1; } for(j=i-1;j=high+1;j--) { a[j+1]=a[j]; } a[high+1]=insert; } } void twoinsert(int a[],int b[],int len) { int i; int j; int first,final; first=final=0;//first、final分别指示d中排好序的记录的第1个和最后1个记录的位置。 b[first]=a[0]; for(i=1;ilen;i++) { if(a[i]b[first])//待插入记录小于d中最小值,插入到d[first]之前(不需移动d数组的元素 { first=(first-1+len)%len; b[first]=a[i]; } else if(a[i]=b[final])//待插入记录大于d中最小值,插入到d[final]之后(不需移动d数组的元素)。 { final=final+1; b[final]=a[i]; } else //待插入记录大于d中最小值,小于d中最大值,插入到d的中间(需要移动d数组的元素 { j=final; final++; while(a[i]b[j]) { b[(j+1+len)%len]=b[j]; j=(j-1+len)%len; } b[j+1]=a[i]; } } for ( i = 0; i len; ++i ) { a[i]=b[(i+first)%len]; } } void shellsort(int a[],int n) { int d; int i,j,temp; d=n/2; int len; len=n; while(d=1) { for(i=d;ilen;i++) { temp=a[i]; j=i-d; while(j=0a[j]temp) { a[j+d]=a[j]; j=j-d; } a[j+d]=temp; } d=d/2; } } void display(int a[],int len) { int i; for(i=0;ilen;i++) couta[i] ; coutendl; } int main() { int i; int choice; int a[8]={3,2,5,4,1,7,9,6}; int len=sizeof(a)/sizeof(int); int b[10]; printf(please input the choice(0,1,2,3):\n); scanf(%d,choice); switch(choice) { case 0: printf(插入排序:\n); isort(a,len); display(a,len); break; case 1: printf(折半插入:\n); halfinsert(a,len); display(a,len); break; case 2: printf(2_路插入:\n); twoinsert(a,b,len); display(a,len); break; case

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档