标签:
插入排序源码:
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 void insert_sort(int a[]) 7 { 8 for(int j=1;j<10;j++) 9 { 10 int key=a[j]; 11 int i=j-1; 12 while(i>=0 && a[i]>key) 13 { 14 a[i+1]=a[i]; 15 i--; 16 } 17 a[i+1]=key; 18 } 19 } 20 21 int main() 22 { 23 int a[10]; 24 int i; 25 for(i=0;i<10;i++) 26 scanf("%d",&a[i]); 27 insert_sort(a); 28 for(i=0;i<10;i++) 29 printf("%3d",a[i]); 30 puts(""); 31 return 0; 32 }
逆序输出:
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 void insert_sort(int a[]) 7 { 8 for(int j=1;j<10;j++) 9 { 10 int key=a[j]; 11 int i=j-1; 12 while(i>=0 && a[i]<key) 13 { 14 a[i+1]=a[i]; 15 i--; 16 } 17 a[i+1]=key; 18 } 19 } 20 21 int main() 22 { 23 int a[10]; 24 int i; 25 for(i=0;i<10;i++) 26 scanf("%d",&a[i]); 27 insert_sort(a); 28 for(i=0;i<10;i++) 29 printf("%3d",a[i]); 30 puts(""); 31 return 0; 32 }
分治法:合并排序
对于两堆以排好序的,最底层的运行逻辑:
1 #include <iostream> 2 #include <cstdio> 3 #define inf 1e9 4 using namespace std; 5 6 void merge_sort(int a[],int p,int q,int r) 7 { 8 int n1=q-p+1; 9 int n2=r-q; 10 int i,j; 11 int L[n1+1],R[n2+1]; 12 for(i=0;i<n1;i++) 13 L[i]=a[p+i]; 14 for(i=0;i<n2;i++) 15 R[i]=a[q+i+1]; 16 17 L[n1]=inf;R[n2]=inf; 18 i=0;j=0; 19 for(int k=p;k<=r;k++) 20 { 21 if(L[i]<=R[j]) 22 { 23 a[k]=L[i]; 24 i++; 25 } 26 else 27 { 28 a[k]=R[j]; 29 j++; 30 } 31 } 32 } 33 34 35 int main() 36 { 37 int i; 38 int a[10]; 39 for(i=0;i<10;i++) 40 scanf("%d",&a[i]); 41 merge_sort(a,0,4,9); 42 for(i=0;i<10;i++) 43 printf("%3d",a[i]); 44 puts(""); 45 return 0; 46 }
标签:
原文地址:http://www.cnblogs.com/do-it-best/p/5452335.html