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