二分法插入排序

2021-09-09 04:15:55 字數 1225 閱讀 4553

二分法插入排序 

演算法思想簡單描寫敘述:

在插入第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 二分法插入排序是穩定的.二分插入排序的比...