插入排序

下面咱們來說一下插入排序算法

基本思想以下:數組

將一個記錄插入到已排序好的有序表中,從而獲得一個新的有序表。實現要點,咱們須要設立一個哨兵,做爲臨時存儲和判斷數組邊界來用。直接插入的代碼以下:spa

 1  for(i=1;i<n;i++)
 2     {
 3         //若是第i個元素大於第i-1元素,直接插入
 4         //不然,移動有序表後再插入
 5         if(a[i]<a[i-1])
 6         {
 7             j=i-1;
 8             x=a[i];//複製爲哨兵
 9             a[i]=a[i-1];//前後移一個元素
10             while(x<a[j])//查找要插入的位置
11             {
12                 a[j+1]=a[j];//元素後移
13                 j--;
14             }
15             a[j+1]=x;//插入到正確位置
16         }
17     }

直接插入算法的時間複雜度爲O(n^2)。code

改進算法能夠用折半插入排序。由於插入排序要求對已經有序的表進行插入,咱們能夠用折半查找法來查找要插入的位置。代碼以下:blog

 1  for(i=1;i<n;i++)
 2    {
 3     int temp=a[i];
 4     int low=0 5     int high=i-1;
 6     while(low<=high)//查找要插入的位置
 7     {
 8         int mid=(low+high)/2;
 9         if(temp<a[mid])//在左(低)半區找
10             high=mid-1;
11         else//在右(高)半區找
12             low=mid+1;
13     }
14     for(j=i;j>=low;j--)
15     {
16         a[j]=a[j-1];//元素後移
17     }
18     a[low]=temp;//插入
19    }
相關文章
相關標籤/搜索