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