归并排序:先排序,后归并
快速排序:先划分,后排序。
下图是归并排序的思想。
归并排序
static void mergeSort(int[] A, int p, int r){
if(p<r){
int mid = p + ((r-p)>>2);
mergeSort(A,p,mid);
mergeSort(A,mid+1,r);
merge(A,mid,p,r);//归并
}
}
归并算法
static void merge(int[] A, int mid, int p, int r){
int current = p;
int left = p;
int right = mid+1;
int [] helper = new int[A.length];
for(int i = 0; i < A.length; i++){
helper[i] = A[i];
}
while(left<=mid&&right<=r){
if(helper[left]<=helper[right]){
A[current] = helper[left];
current++;
left++;
} else {
A[current] = helper[right];
current++;
right++;
}
}
while(left<=mid){
A[current] = helper[left];
current++;
left++;
}
}
主函数
public static void main(String[] args) {
int[] arr = {2,4,3,1,5,6,7,4};
mergeSort(arr, 0, arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}