码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法

时间:2014-12-24 13:14:23      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

排序

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!