排序算法优化,希望大家多给些建议

qq_32606377 2019-06-05 05:05:37
/**
*
* @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--;
}
}

}
...全文
35 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧