二分法插入排序
演算法思想簡單描寫敘述:
在插入第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 二分法插入排序是穩定的.二分插入排序的比...