数据结构之插入排序

插入排序是很常见的排序方式,通常我们使用的插入排序有下面几种:

1、直接插入排序

算法思想:第 i 趟插入排序为:在含有i-1个元素的有序子序列中插入一个元素,使其成为含有i个元素的有序子序列。在查找插入位置的过程中,可以同时后移元素。整个过程进行n-1趟插入,即先将整个序列的第1个元素看成是有序的,然后从第2个元素起逐个进行插入,直至整个序列有序。

 1 void directInsertSort(int Arr[], int n)
 2 {
 3     int i, j, temp;
 4     for (i = 1; i<n-1; i++)
 5     {
 6         if(Arr[i] < Arr[i-1])
 7         {
 8             j = i - 1;
 9             temp = A[i];
10             while(j >= 0 && temp < Arr[j])
11             {
12                 Arr[j+1] = Arr[j];
13                 j--;
14             }
15             Arr[j+1] = temp;
16         }
17     }
18 }

 

2、折半插入排序

算法思想:插入思想同直接插入排序,但寻找查找位置使用折半查找法。

 1 void BinInsertSort(int Arr[], int n)
 2 {
 3     int i, j, low, high, mid, temp;
 4     for(i = 1; i <= n-1; i++)
 5     {
 6         temp = Arr[i];
 7         low = 0;
 8         high = i - 1;
 9         while(low <= high)
10         {
11             mid = (low + high)/2;
12             if(temp > Arr[mid])
13                 low = mid - 1;
14             else
15                 high = low + 1;
16         }
17         for(j = 1; j > low; j--)
18             Arr[j] = Arr[j-1];
19     }
20 }

 

posted on 2017-11-05 16:28  Arthurian  阅读(373)  评论(0编辑  收藏  举报