【数据结构】【排序】折半插入排序

折半插入排序是对直接插入排序的升级算法,直接插入排序算法在大数据量面前排序效率是比较低的,折半插入排序的算法对直接插入排序算法的改进就是“查找插入位置”上的算法上的改进,由于需要查找的数据在数组上正好是有序的部分,那么可以非常方便的使用折半查找的算法查找插入的位置。

import java.util.Scanner;

public class BInsertSort{
	public static void main(String args[]){
		Scanner scanner=new Scanner(System.in);
		int total=scanner.nextInt();
		int[] array=new int[1024];
		for(int i=0;i<total;i++){
			array[i]=scanner.nextInt();
		}
		//total是数组长度
		insertSort(array,total);
		output(array,total);
	}
	public static void output(int[] array,int total){
		for(int i=0;i<total;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
	public static void insertSort(int[] array,int total){
		int temp;
		for(int i=1;i<total;i++){
			temp=array[i];
			int low=0;
			int high=i-1;
			int midLoc=0;
			//退出循环的时候一定是low比high大1,high可能为负数,但是low一定是正数
			while(low<=high){
				midLoc=(low+high)/2;
				if(temp<array[midLoc]){
					high=midLoc-1;
				}
				else{
					low=midLoc+1;
				}
			}
			//这里使用low或者high+1都可以,low=high+1
			for(int j=i;j>low;j--){
				array[j]=array[j-1];	
			}
			array[low]=temp;
		}
	}
}

 测试数据使用算法生成:一共有1024个打乱的整数

import java.util.Random;

public class MyRandom {
	public static void main(String args[]){
		int[] array=new int[1024];
		for(int i=0;i<1024;i++){
			array[i]=i;
		}
		for(int i=0;i<=1023;i++){
			int m=new Random().nextInt(1024);
			int n=new Random().nextInt(1024);
			int temp=array[m];
			array[m]=array[n];
			array[n]=temp;
		}
		System.out.println("1024");
		for(int i=0;i<1024;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
}

 怎么实现两个程序之间的通信比较重要,在Linux下可以使用管道实现:

java MyRandom | java BInsertSort

 

 

猜你喜欢

转载自kdyzm.iteye.com/blog/2271627