java 二分法插入排序
public class Effpx {
public static void Sort(int[] objs){
System.out.println("排序之前:");
for (int i = 0; i < objs.length; i++) {
System.out.print(objs[i]+" ");
}
System.out.println("");
for(int i=1;i<objs.length;i++){
int first=0;
int last=i;
int mid=0;
int key=objs[i];
while(first<last){
mid =(first + last)/2;
if(objs[mid]<objs[i]){
first=mid+1;
}else if(objs[mid]>objs[i]){
last=mid-1;
}
}
System.out.println("mid:"+mid);
if(objs[mid]>objs[i]){
for (int j = i; j>mid&&j>=1; j--) {// 复杂度,最差情况:(n-1)+(n-2)+...+n/2=O(n^2)
objs[j]=objs[j-1];
}
objs[mid]=key;
}
System.out.println("排序之后:");
for (int k = 0; k < objs.length; k++) {
System.out.print(objs[k]+" ");
}
System.out.println("");
}
// System.out.println("");
// System.out.println("排序之后:");
// for (int i = 0; i < objs.length; i++) {
// System.out.print(objs[i]+" ");
// }
}
public static void main(String args[]){
// int[] a={49,38,65,97,76,13,27,78,34,12,64,1};
int[] a={49,38,65,97,76,13,27,78,34,12};
Effpx.Sort(a);
}
}
排序之后:
13 12 27 34 38 49 65 76 78 97
得到的结果是不对的,请帮忙