#include<iostream>
/**
折半插入 -- 将数组分为有序区和无序区,将无序区第一个元素采用折半查找方法在有序区找到插入
位置,再通过移动元素进行插入。
**/
int main() {
int arr[5] = {5,4,3,2,1};
void InsertSort2( int array[], int n );
InsertSort2(arr,5);
for( int i = 0; i < 5; i++ ) {
std::cout<<arr[i]<<std::endl;
}
return 0;
}
void InsertSort2( int array[], int n ) {
int i,j,left,right,mid;
int tmp;
for( i = 1; i < n; i++ ) {
tmp = array[i];
left = 0;
right = i-1;
while( left <= right ) {
mid = (left+right)/2; //找到中间位置
if( tmp < array[mid] )
right = mid-1; //插入点在左边
else
left = mid+1; //插入点在右边
}
for( j = i-1; j >= right + 1; j--) //元素后移
array[j+1] = array[j];
array[right+1] = tmp; //插入
}
}
折半插入排序
最新推荐文章于 2022-08-13 21:33:45 发布