插入排序Insertion Sort

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) 。

使用插入排序为一列数字进行排序的过程
分类 排序算法
数据结构 数组
最差时间复杂度 O(n^2)
最优时间复杂度 O(n)
平均时间复杂度 O(n^2)
最差空间复杂度 总共O(n) ,需要辅助空间O(1)
最佳算法 No

 

 1 void insert_sort(int *array, int n)
 2 {
 3     int i,j;
 4     int temp;
 5     for(i = 1; i < n; i++)
 6     {
 7         temp = *(array + i);
 8         for(j = i;j > 0 && *(array + j - 1) > temp;j--)
 9         {
10             *(array + j) = *(array + j - 1);
11         }
12         *(array + j) = temp;
13     }
14 }
15 void InsertSortArray(int arr[], int n) 
16 {
17     for(int i=1;i<n;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分 
18     {
19         int temp=arr[i];//temp标记为未排序第一个元素 
20         int j=i-1;
21         while (j>=0 && arr[j]>temp)/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/
22         { 
23             arr[j+1]=arr[j];  
24             j--; 
25         } 
26         arr[j+1]=temp; 
27     } 
28 } 

 

posted @ 2013-08-09 19:52  Geekers  阅读(202)  评论(0编辑  收藏  举报