【记录】
算法具体执行过程
代码实现
public class GuiBing {
//对数组a进行划分
//归并排序算法
public static int[] dividSort(int[] a,int low,int high){
int mid=(low+high)/2;
if(low<high){
dividSort(a,low,mid);
dividSort(a,mid+1,high);
//对其进行归并
merge(a,low,mid,high);
}
return a;
}
//对a[]中划分过后两部分下标为low-mid,mid+1-high的元素进行排序
public static int[] merge(int[] a,int low,int mid,int high){
int i=low;//第一部分的下标起点
int j=mid+1;//第二部分的下标起点
int[] temp=new int[high-low+1];//辅助数组,用来暂存当前两部分合并为有序数组的值
int index=0;
while(i<=mid&&j<=high){
if(a[i]<a[j]){
temp[index]=a[i];
i++;
index++;
}else{
temp[index]=a[j];
j++;
index++;
}
}
while(i<=mid){
temp[index]=a[i];
i++;
index++;
}
while(j<=high){
temp[index]=a[j];
j++;
index++;
}
//此时temp数组是有序的数,将其覆盖a[]数组中的值
for(int k=0;k<temp.length;k++){
//因为temp中排序的是a数组中low-high的值,排序完成后仍然需要放回该区间的位置上
a[low+k]=temp[k];
}
return a;
}
public static void main(String[] args) {
int[] a=new int[]{3,9,6,24};
dividSort(a,0,a.length-1);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}