二分法插入排序

2021-04-15 10:52:25 字數 1188 閱讀 1624

二分法插入排序 

演算法思想簡單描述:

在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們

中間的那個元素比,如果小,則對前半再進行折半,否則對後半

進行折半,直到left>right,然後再把第i個元素前1位與目標位置之間

的所有元素後移,再把第i個元素放在目標位置上。

二分法沒有排序,只有查詢。所以當找到要插入的位置時。移動必須從最後乙個記錄開始,向後移動一位,再移動倒數第2位,直到要插入的位置的記錄移後一位。

二分插入排序是穩定的,平均時間o(n2)

void

binsort(

refint

data1) 1

、二分法查詢插入位置

如果r[i]

2、後移,有點迷惑,什麼時候需要後移呢?有哪些記錄需要移動呢?

雖然我們很清楚的知道,我們需要後移那些排序碼大於r[i]的記錄,但難免會問自己這樣幾個問題。其實它相當於需要移動從i-1到左指標的記錄。

3、插入

由1中得到的左指標其實就是元素要插入的位置。 4

、演算法

//後移排序碼大於r[i]的記錄

for( j = i-1;j >= left;j-- )

// 插入

data1[left] = num; }

//插入的元素在左區間

left = middle+1;     }

//後移排序碼大於r[i]的記錄

for( j = i-1;j >= left;j-- )

// 插入 data1[left] = num;

}

/* 二分法插入排序的演算法源程式*/

#include

#define maxnum 100

typedef int keytype;

typedef int datatype;

typedef struct recordnode;

typedef struct

for (j = i-1;   j >= left;   j--)

data[j+1] = data[j];           /* 將排序碼大於ki的記錄後移 */

if (left != i) data[left] = temp;}}

sortobject vector=;

int main()

二分法插入排序

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

排序 二分法插入排序

不同點 在尋找插入位置的時候採用二分法定位。二分法怎麼定位?執行結果 原陣列 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...

二分法插入排序 Binary Sort

3.2 二分法插入排序 按二分法找到合適的位置,可以減少比較的次數.ex int nums 8,1,4,2,23,10 1,8,4,2,23,10 1,4,8,2,23,10 1,2,4,8,23,10 1,2,4,8,23,10 1,2,4,8,10,23 二分法插入排序是穩定的.二分插入排序的比...