排序算法之二 折半插入排序

来源:互联网 发布:山东淘宝拍卖会 编辑:程序博客网 时间:2024/05/16 14:21

   折半插入排序,折半插入排序在直接插入的基础上进行改进,考虑到直接插入排序将很多开销放在比较和数据移动上。比较是不可避免的,有没有什么办法可以减少比较的次数呢?至少不要像现在这样挨个去比吧?于是想到在前面查找算法中的折半查找法,迅速翻书回去看看。考虑到这样一种情况,当第i个元素要进行排序的时候,它前面的1i-1位置上的数据是局部有序的,对于有序的数据序列,采用折半查找法去判断在何处插入i位置上的数据,就大大减少了需要比较的次数。意思就是这样了,上代码,截图。最后hight就是要插入的位置。折半插入排序不会减少数据的移动次数。

int BinaryInsertSort(){int i,j,low,high,mid;for (i = 2; i < iCount; i++){iRawBuff[0] = iRawBuff[i];low = 1;high = i -1;while (low<=high){mid = (low+high)/2;if(iRawBuff[0] > iRawBuff[mid])low = mid +1;elsehigh = mid -1;}//找到high,high+1就是i要插入的位置for(j = i-1; j>= high + 1; j--){iRawBuff[j+1] = iRawBuff[j];}iRawBuff[j+1] = iRawBuff[0];printf("第%d趟:\n",i-1);for(int k = 0; k < iCount; k++){std::cout<<iRawBuff[k]<<"\t";}std::cout<<std::endl;}return 0;}



原创粉丝点击