标签:
排序
1. 直接插入排序
原理:将当前无序区a[i...n-1]的记录一个一个插入到有序区a[0....i-1]合适位置;
1 void insert_sort(int a[], int n) 2 { 3 int j; 4 for(int i=1;i<n;i++) 5 { 6 int temp=a[i]; 7 8 for(j=i-1;j>=0&&temp<a[j];j--) 9 { 10 a[j+1]=a[j]; 11 } 12 a[j+1]=temp; 13 } 14 }
2. shell 排序
原理:实质为分组插入排序,首先按增量为d分成若干组,下标相差d的元素放在一组使用直接插入排序;然后用一个较小的增量继续分组和排序,直至增量减到1,整个分组即为一组,排序完成。
1 void shell_sort(int *a, int n) 2 { 3 for(int h=n/2;h>0;h=h/2) 4 { 5 for(int i=h;i<n;i++) //for 循环就是增量为h的直接插入排序 6 { 7 int temp=a[i]; 8 int j; 9 for(j=i-h;j>=0&&temp<a[j];j=j-h) 10 { 11 a[j+h]=a[j]; 12 } 13 a[j+h]=temp; 14 } 15 } 16 }
3. 冒泡排序
原理:首先将a[0...n-1] 垂直排列,根据气泡原理,较轻的会浮在较重的上面。 自底向上扫描:凡扫描到违反此原则的轻气泡,就使其上浮。
每遍扫描都会是最轻的一个元素上浮。扫描n-1 趟
1 void bubble_sort(int a[],int n) 2 { 3 for(int i=0;i<n-1;i++) 4 { 5 for(int j=n-1;j>i;j--) 6 { 7 if(a[j]<a[j-1]) 8 { 9 int temp=a[j]; 10 a[j]=a[j-1]; 11 a[j-1]=temp; 12 } 13 } 14 } 15 }
标签:
原文地址:http://www.cnblogs.com/kennethshu/p/4182016.html