排序演算法__折半插入排序
排序演算法__折半插入排序
一、介紹
由於插入排序的基本操作是在一個有序表中進行查詢和插入,這個查詢操作可利用“折半查詢”來實現,由此進行的插入排序稱之為折半插入排序。
二、C++實現
#include<iostream>
using namespace std;
void binSearch(int a[],int n)
{
for(int i=1;i<n;i++)//將元素a[i]插入到有序區間[0,i)中
{
//使用二分法查詢a[i]應該插入的位置
int l=0,r=i,t=a[i];
while(l<r)
{
int mid=(l+r)>>1;
if(t<a[mid])
r=mid;
else
l=mid+1;
}
//l是第一個大於a[i]的數,也就是說a[i]的位置就該為 l (特殊時l=i)
for(int j=i-1;j>=l;j--) a[j+1]=a[j];//記錄後移
a[l]=t;//元素a[i]的插入位置為l
}
}
int main()
{
int a[10]={1,34,2,67,4,6,90,223,12,456};
printf("排序前:");
for(int i=0;i<10;i++)
printf("%d ",a[i]);
binSearch(a,10);
printf("\n排序後:");
for(int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
三、時間複雜度
折半插入排序和直接插入排序相比,僅減少了關鍵字間的比較次數,而記錄的移動次數不變,因此折半插入排序的時間複雜度仍為
相關文章
- 排序演算法之折半插入排序排序演算法
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- C語言例題19:折半插入排序C語言排序
- 排序演算法:插入折半排序 PHP 版排序演算法PHP
- PHP 排序演算法之插入排序PHP排序演算法
- 排序演算法:插入排序演算法 PHP 版排序演算法PHP
- 常用演算法-插入排序演算法排序
- 排序演算法入門之「插入排序」排序演算法
- 排序演算法(3)插入排序(Insertion Sort)排序演算法
- 排序演算法之「插入排序(Insertion Sort)」排序演算法
- 排序演算法——直接插入排序排序演算法
- 排序演算法__直接插入排序排序演算法
- 排序演算法:直接插入排序排序演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 實時插入排序演算法排序演算法
- Java常見排序演算法之插入排序Java排序演算法
- 排序演算法:二分插入排序排序演算法
- 畫江湖之演算法篇【排序演算法】插入排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 插入排序演算法排序
- 二分查詢和折半插入排序一塊說說-很合適~~~排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 插入排序排序排序
- 排序演算法之——二分插入排序演算法排序演算法
- 三言兩語講排序演算法——插入排序排序演算法
- 小白懂演算法之插入排序演算法排序
- 從演算法開始[插入排序]演算法排序
- 從演算法開始(插入排序)演算法排序
- PHP 演算法02之插入排序PHP演算法排序
- 直接插入排序演算法排序演算法
- Python進階-演算法-插入排序Python演算法排序
- 死磕演算法之插入排序演算法排序
- 好程式設計師Java乾貨分享5分鐘瞭解折半插入排序程式設計師Java排序
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- Java實現氣泡排序和插入排序演算法Java排序演算法
- 【排序演算法動畫解】直接插入排序排序演算法動畫
- 【一起學習排序演算法】4 插入排序排序演算法
- 插入排序排序