一.算法思想:
插入排序算法思想:将插入的数与有序的数组各数比较,按照大小关系插入,保持原有大小顺序。(按照数组尾到数组头的顺序遍历)
而二分法插入:首先取出原有序中间数与新插的数比较,然后插入新数大小包含于其中的一半数组,再次取该数组中间数,如此重复下去,直至最后得到数组个数为一,将最后得到的数之后的数后移,然后将新插入的数放在该索引处。
二.模拟源码:
#include<iostream>
using namespace std;
//直接插入排序
int arr[15]={11,22,45,71,2,3,5,7,9,0,14,1,4,5,6};
int list [15];
void binaryInsertSort(int arr[],int size){
int low,high,temp,value;
for(int i=0;i<size;i++){
value=arr[i];
low=0;
high=i-1;
while(low<=high){
temp=(low+high)/2;
if(list[temp]<value)
low=temp+1;
else
high=temp-1;
}
for(int k=i;k>=low;k--){
list[k]=list[k-1];
}
list[low]=value;
}
}
void show(){
for(int j=0;j<15;j++)
cout<<list[j]<<" ";
cout<<endl;
}
int main(){
binaryInsertSort(arr,15);
cout<<"折半插入后:"<<endl;
show();
}