排序之插入排序02二分法插入排序 折半插入排序

2021-10-24 09:49:40 字數 649 閱讀 5074

直接插入排序是在有序序列中從後往前乙個乙個比較來尋找插入位置j的,這樣比較次數相對比較繁瑣,也可以通過二分法來尋找插入位置j,具體思路如下:

開始將前面有序序列第乙個元素的位置(0)標記為low,最後乙個元素的位置(i-1)標記為high,mid=(high+low)/2;通過不斷使a[mid]與取得數a[i]進行比較,由於前面的序列是有序的,所以,如果tmp比a[mid]大,則說明是需要在mid 後半段進行尋找位置j,(low=mid+1); 如果tmp比a[mid]小,則說明需要在前半段尋找位置j,(high=mid-1).直到low==high,這個時候 low/high就是需要差入的位置了.

將i-1到high/low位置的元素不斷後移一位

相較於直接插入排序減少了比較次數,但是沒有減少移動次數,平均效能優於直接插入排序

時間複雜度為o(n^2) 空間複雜度為o(1) ,是一種穩定的排序方法。

程式如下:

//二分法插入排序

void insertbinary(int a, int n)

/* 2.後移插入位置 */

//從位置i到位置j(low/high)依次後移動一位

for(j=i; j>low; j--)

a[low]=tmp;

}}

排序 二分法插入排序

不同點 在尋找插入位置的時候採用二分法定位。二分法怎麼定位?執行結果 原陣列 21 8 2 18 0 9 27 12 5 24 第0次迴圈排序結果 8 21 2 18 0 9 27 12 5 24 第1次迴圈排序結果 2 8 21 18 0 9 27 12 5 24 第2次迴圈排序結果 2 8 18...

排序演算法 插入排序 二分法插入排序

package 插入排序 二分法插入排序 按二分法找到合適位置插入 穩定 基本思想 二分法插入排序的思想和直接插入一樣,只是找合適的插入位置的方式不同,這裡是按二分法找到合適的位置,可以減少比較的次數。public class 二分法插入排序 system.out.println 排序前 for i...

二分法插入排序

二分法插入排序 演算法思想簡單描述 在插入第i個元素時,對前面的0 i 1元素進行折半,先跟他們 中間的那個元素比,如果小,則對前半再進行折半,否則對後半 進行折半,直到left right,然後再把第i個元素前1位與目標位置之間 的所有元素後移,再把第i個元素放在目標位置上。二分法沒有排序,只有查...