首页 > 代码库 > 排序算法

排序算法

排序

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 }

 

排序算法