排序算法优化,希望大家多给些建议
/**
*
* @param ints 需要排序数组
* @param start 排序起始位置
* @param end 排序终止位置
*/
public static void sort(int[] ints,int start,int end){ // 这里就不对start 和end是否越界判断了
int len = end - start;
if(len < 2){ // 小于2说明是最下面了不用接着分割了
if(ints[start] >= ints[end]){
int big = ints[start];
ints[start] = ints[end];
ints[end] = big;
}
return;
}
int mid = ( start + end ) / 2;
int count = mid + 1;
// 对数组进行形式分割
sort(ints, start, mid);
sort(ints, count , end);
/* 注释的for 与下面的for效果是一样的
注释的for是一次往前推一格 ,未注释for是一次推多格
这个是不是占用多余内存但是效率稍低
for(int i = 0 , length = mid - start +1; i < length; end--){
if(mid < start || end < count){
break;
}
if(ints[mid] > ints[end]){
//mid ->end 往前推一位
int big = ints[mid];
for(int j = mid;j <end;j++){
ints[j] = ints[j+1];
}
ints[end] = big;
mid--;
count--;
}
}
*/
int move = 0;
for(int i = 0 ,length = mid - start +1;i < length;){
if((mid < start || end < count) && move == 0){
break;
}
if(!(mid < start || end < count) && ints[mid] > ints[end]){
move++;
mid--;
}else{
if(move != 0){
int[] ints1 = new int[move];
for(int j = 0;j<move;j++){
ints1[j] = ints[mid + move - j];
}
for(int j = mid + 1;j< end - move + 1 ;j++){
ints[j] = ints[j + move];
}
for(int j = 0;j<move;j++){
ints[end -j] = ints1[j];
}
count = count - move;
end = end - move;
move = 0;
}
end--;
}
}
}