0002归并排序
来源:互联网 发布:阿里云软件 编辑:程序博客网 时间:2024/05/16 11:13
public class sort {
int[] arr;
public sort(int[] arr){
this.arr = arr;
}
public int[] sortArr(){
//
return sortArr1(this.arr);
}
private int[] sortArr1(int[] arr){
//如果数组的长度=1,直接返回这个数组
if(arr.length ==1){
return arr;
}
//如果数组长度>1 ,2分解然后对分解后的数组各自排序
int fen = arr.length/2;
int[] arrLeft = new int[fen];
int[] arrRight = new int[arr.length-fen];
int i=0;
for(int a:arr){
if(i<fen){
arrLeft[i] = a;
}else{
arrRight[i-fen] = a;
}
i++;
}
int[] arrLeftOk = sortArr1(arrLeft);
int[] arrRightOk = sortArr1(arrRight);
//把两个已经排好序的数组合并
int[] arrOk = new int[arrLeftOk.length+arrRightOk.length];
int Llen=0;
int Rlen = 0;
while(true){
if(Llen==(arrLeftOk.length)&&Rlen==(arrRightOk.length)){
break;
}
if(Llen==arrLeftOk.length){
arrOk[Llen+Rlen] = arrRightOk[Rlen];
Rlen++;
continue;
}
if(Rlen==arrRightOk.length){
arrOk[Llen+Rlen] = arrLeftOk[Llen];
Llen++;
continue;
}
if(arrLeftOk[Llen] >= arrRightOk[Rlen]){
arrOk[Llen+Rlen] = arrRightOk[Rlen];
Rlen++;
}else{
arrOk[Llen+Rlen] = arrLeftOk[Llen];
Llen++;
}
}
return arrOk;
}
public static void main(String[] args) {
//int[] c = {1,2,2,0,2,2,2,2,3,4,5,6,7,8,9,1};
int[] c =new int[1000000];
int i=0;
while(true){
if(i>=1000000) break;
c[i]=1000000-i;
i++;
}
sort s = new sort(c);
int[] b = s.sortArr();
for(int b1:b){
System.out.println(b1+",");
}
}
}
- 0002归并排序
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Maven是什么,以及为什么要使用Maven
- 涨工资了(第十四周上机任务)
- C# 连接MySQL数据库
- 图解HTTPS
- 内聚?耦合?
- 0002归并排序
- 揭开Socket编程的面纱
- 为什么应该用模块取代C/C++中的头文件?
- Exception starting filter struts2
- C#控制键盘按键(大小写按键等)
- 使用类似ajax上传文件方法
- VS error C1083: 无法打开包括文件:“gl\glew.h”: No such file or directory\
- Servlet事件监听器
- Win7 64位去快捷方式箭头