//插入排序<br />//直接插入排序 二分插入排序 2-路插入排序 表插入排序 希爾排序<br />#include<stdio.h><br />#include<stdlib.h><br />void directsort(int *a,int n) //直接插入排序<br />{<br /> int i,j;<br /> int t;<br /> for(i=2;i<=n;i++)<br /> {<br /> t=a[i];<br /> for(j=i-1;a[j]>t&&j>0;j--)<br /> a[j+1]=a[j];<br /> a[j+1]=t;<br /> }<br />}<br />void bisort(int *a,int n) //二分插入排序<br />{<br /> int i,j,t,m;<br /> int low,high;<br /> for(i=2;i<=n;i++)<br /> {<br /> t=a[i];<br /> low=1;<br /> high=i-1;<br /> while(low<=high)<br /> {<br /> m=(low+high)/2;<br /> if(a[m]>a[i])<br /> high=m-1;<br /> else low=m+1;<br /> }<br /> for(j=i-1;j>=low;j--)<br /> a[j+1]=a[j];<br /> a[j+1]=t;<br /> }<br />}<br />void swap(int *a,int i,int j)<br />{<br /> int t;<br /> t=a[i];<br /> a[i]=a[j];<br /> a[j]=t;<br />}<br />void biinsert(int *a,int n)//2-路插入排序<br />{<br /> int d[n+1];<br /> int i,j,k,t,m;<br /> int first,final,high,low;<br /> first=final=1;<br /> d[1]=a[1];<br /> for(i=2;i<=n;i++)<br /> {<br /> if(a[i]>d[1])<br /> {<br /> low=1;<br /> high=final;<br /> while(low<=high)<br /> {<br /> m=(low+high)/2;<br /> if(a[i]>d[m])<br /> low=m+1;<br /> else high=m-1;<br /> }<br /> for(j=final;j>=low;j--)<br /> d[j+1]=d[j];<br /> d[low]=a[i];<br /> final++;<br /> }<br /> else {<br /> if(first==1)<br /> {<br /> first=n;<br /> d[n]=a[i];<br /> }<br /> else {<br /> low=first;<br /> high=n;<br /> while(low<=high)<br /> {<br /> m=(low+high)/2;<br /> if(a[i]>d[m])<br /> low=m+1;<br /> else high=m-1;<br /> }<br /> for(j=first;j<=high;j++)<br /> a[j-1]=a[j];<br /> a[high]=a[i];<br /> first--;<br /> }<br /> }<br /> }<br /> for(i=first,j=1;i<=n;i++,j++)<br /> a[j]=d[i];<br /> for(i=1;i<=final;i++,j++)<br /> a[j]=d[i];<br />} </p><p>void shellinsert(int *a,int n,int dk) //希爾排序的插入操作<br />{<br /> int i,j,t;<br /> for(i=dk+1;i<=n;i++)<br /> {<br /> t=a[i];<br /> for(j=i-dk;j>0&&a[j]>t;j-=dk)<br /> a[j+dk]=a[j];<br /> a[j+dk]=t;<br /> }<br />}<br />void shellsort(int *a,int n) //希爾排序<br />{<br /> int i;<br /> for(i=1;i<=5;i++)<br /> shellinsert(a,10,5-i);<br />}<br />void output(int *a,int n)<br />{<br /> int i;<br /> for(i=1;i<=n;i++)<br /> printf("%d ",a[i]);<br /> printf("/n");<br />}<br />int main()<br />{<br /> int a[]={0,12,78,895,24,158,369,58,621,1475,2};<br /> output(a,10);<br /> shellsort(a,10);<br /> output(a,10);<br /> system("pause");<br />} </p><p>