package sort;
import java.util.Arrays;
/**
* @author 作者:hui E-mail: 137437006@qq.com
* @version 创建时间:2018年1月12日 上午9:41:32
* 类说明
*/
public class GB {
//入口,归并排序的重点是先分割成小块,排好序再排大块,一级一级往上排
public void domain(int[] data){
if(data==null||data.length==0){
return;
}
mergesort(data,0,data.length-1);
}
//分割成小块排序--》大块排序
public void mergesort(int[] data,int fis,int las){
//如果当前的个数只有1个就不排序
if(fis<las){
int mid = (fis+las)/2;
mergesort(data,fis,mid);
mergesort(data, mid+1, las);
merge(data,fis,mid,las);
}
}
//排序规则
public void merge(int[] data,int fis,int mid,int las){
int i = fis;
int j = mid+1;
int z = 0;
int[] temp = new int[las-fis+1];
//两边对比排序
while(i<=mid&&j<=las){
if(data[i]<data[j]){
temp[z++] = data[i++];
}else{
temp[z++] = data[j++];
}
}
//左右两边个数不对称的情况
while(i<=mid){
temp[z++] = data[i++];
}
while(j<=las){
temp[z++] = data[j++];
}
for (int l = 0; l < temp.length; l++) {
data[fis+l] = temp[l];
}
System.out.println(Arrays.toString(data));
}
public static void main(String[] args) {
GB gb = new GB();
int[] data = new int[]{9,8,7,6,5,4,3,2,1};
gb.domain(data);
}
//打印过程:
[8, 9, 7, 6, 5, 4, 3, 2, 1]
[7, 8, 9, 6, 5, 4, 3, 2, 1]
[7, 8, 9, 5, 6, 4, 3, 2, 1]
[5, 6, 7, 8, 9, 4, 3, 2, 1]
[5, 6, 7, 8, 9, 3, 4, 2, 1]
[5, 6, 7, 8, 9, 3, 4, 1, 2]
[5, 6, 7, 8, 9, 1, 2, 3, 4]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
//总结:左边先排序,右边再排序,最后统一排好。
}
归并排序
最新推荐文章于 2023-12-11 10:45:47 发布