排序算法–归并排序
一、学习资料:
简书–八大排序算法
博客–八大排序算法
二、排序过程及代码
package com.lxf.sort;
import java.util.Arrays;
import java.util.Random;
public class Merge {
private static int[] aux;
public static void sort(int[] nums){
aux=new int[nums.length];
sort(nums,0,nums.length-1);
}
public static void sort(int[] nums,int low,int high){
if(low>=high){
return;
}
int mid=(low+high)/2;
sort(nums,low,mid);
sort(nums,mid+1,high);
merge(nums,low,mid,high);
}
public static void merge(int[] a, int low, int mid, int high) {
int i = low, j = mid + 1;
for (int k = low; k <= high; k++) {
aux[k] = a[k];
}
for (int k = low; k <= high; k++) {
if (i > mid) {
a[k] = aux[j++];
} else if (j > high) {
a[k] = aux[i++];
} else if (aux[j] < aux[i]) {
a[k] = aux[j++];
} else {
a[k] = aux[i++];
}
}
}
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 100000; i++) {
stringBuilder.append(random.nextInt(500)+",");
}
stringBuilder.setLength(stringBuilder.length()-1);
String[] splits= stringBuilder.toString().split(",");
int[] nums = Arrays.stream(splits).mapToInt(Integer::valueOf).toArray();
long start = System.currentTimeMillis();
System.out.println("start = " + start);
sort(nums);
long end = System.currentTimeMillis();
System.out.println("end = " + end);
long sub=end-start;
System.out.println("花费时间="+sub);
}
}