【插入排序】二分插入排序--Java

来源:互联网 发布:淘宝客赚钱是真的吗 编辑:程序博客网 时间:2024/05/21 21:45

二分插入排序又叫折半插入排序,其思想是:

1、将第一个元素看做已排好序的有序区,后面的元素看做未排序的无序区

2、将无序区的第一个元素X利用二分查找法找到X在有序区的插入位置并插入,则有序区还是有序的

3、重复步骤2,将无序区所有的元素依次插入到有序区,则排序完成


这种排序的核心的就是利用二分查找法找到有序区的合适位置并插入,例如:

34679  8152(这是已经排好部分序列的数组a[],以此为例讲解插入过程)

因为8>6,所以8应该放在6与9之间,又8>7,故8应该放在7与9之间,又7与9之间没有元素,所以8的插入位置确定,其插入结果为

346789  152


代码如下(运行成功):

public class InsertSort {public static void main(String[] args){int[] array={3,6,4,7,9,8,1,5,2};for(int i=1;i<array.length;i++){int tmp=array[i];int low=0;int high=i-1;while(low<=high){int mid=(low+high)/2;if(array[mid]>tmp){high=mid-1;}else{low=mid+1;}}for(int j=i-1;j>=high+1;j--){array[j+1]=array[j];}array[high+1]=tmp;}for(int i=0;i<array.length;i++){System.out.print(array[i]+"\t");}}}

二分插入排序的空间复杂度为O(1),时间复杂度仍为O(n^2).

0 0
原创粉丝点击