分析:
将一个数组拆成两个数组分别进行排序,然后将两个排序好的数组进行合并。
JAVA代码实现:
public class Main {
public static void main(String[] args) {
int[] arr = new int[100];
for(int i=0;i<100;i++) {
arr[i] = (int) (Math.random() * 100);
}
sort(arr);
for(int i=0;i<100;i++){
System.out.println(arr[i]);
}
}
public static void sort(int[] arr) {
sort(arr, 0, arr.length-1);
}
//对数组中的[start, end]进行排序
private static void sort(int[] arr, int begin, int end) {
if(begin >= end) { //边界
return;
}
int half = (begin + end) /2;
//先排序左边
sort(arr, begin, half);
//再排序右边
sort(arr, half+1, end);
merge(arr, begin, half, end);
}
private static void merge(int[] arr, int begin, int half ,int end) {
int[] cache = new int[end - begin + 1];
int k = 0;
int l = begin;
int r = half+1;
while(l <= half && r <= end) {
if(arr[l] <= arr[r]) {
cache[k++] = arr[l++];
}
else{
cache[k++] = arr[r++];
}
}
while(l<=half){
cache[k++] = arr[l++];
}
while(r<=end){
cache[k++] = arr[r++];
}
for(int i=begin;i<=end;i++){
arr[i] = cache[i-begin];
}
}
}
网友评论