常用排序算法之折半插入排序

来源:互联网 发布:怎样在u盘上编程 编辑:程序博客网 时间:2024/05/16 18:58

折半插入排序

    1、思想:折半插入排序将序列分为两部分,有序区R[0,j-1],无序区R[j,i-1]。将无序区中的元素插入有序区中的方法是通过折半的方式在有序区中查找插入的位置。假设有待排序列{ 8, 6, 9, 5, 4, 12, 7,11,10 },经过几次排序后的某种情况如图1所示。

图1
     2、代码实现(java)
package sort.baohuajie;import java.util.Arrays;public class HalfSort {public static void halfSort(int[] array) {//搜索区索引,初始化为0int low=0;//左边界int mid=0;//中间int high=0;//右边界int array_i=0;//找到array[i]需要放置的位置:即low的位置for(int i=1;i<array.length;i++){array_i=array[i];high=i-1;//只有array[i]比array[i-1]小的时候才需要和搜索区比较if(array_i<array[i-1]){while(low<=high){mid=(low+high)/2;if(array_i>array[mid]){low=mid+1;}else{high=mid-1;}}//将low到i的元素整体后移,然后将array[i]放在low的位置for(int j=i;j>low;j--){array[j]=array[j-1];}array[low]=array_i;}System.out.println("第"+i+"趟排序结果:"+Arrays.toString(array));}}public static void main(String[] args) {int[] array = { 8, 6, 9, 5, 4, 12, 7,11,10 };halfSort(array);}}
     3、执行结果
第1趟排序结果:[6, 8, 9, 5, 4, 12, 7, 11, 10]第2趟排序结果:[6, 8, 9, 5, 4, 12, 7, 11, 10]第3趟排序结果:[5, 6, 8, 9, 4, 12, 7, 11, 10]第4趟排序结果:[4, 5, 6, 8, 9, 12, 7, 11, 10]第5趟排序结果:[4, 5, 6, 8, 9, 12, 7, 11, 10]第6趟排序结果:[4, 5, 6, 7, 8, 9, 12, 11, 10]第7趟排序结果:[4, 5, 6, 7, 8, 9, 11, 12, 10]第8趟排序结果:[4, 5, 6, 7, 8, 9, 10, 11, 12]


【上一篇】常用排序算法之直接插入排序

【下一篇】常用排序算法之希尔排序


原创粉丝点击