归并排序
1.算法思想
归并排序主要是将一组数逐层划分,最终划分为单个数据,对两个数据间进行比较,再将其合并成数组,主要采取的还是“分而治之”的算法思想。
2.图解
这张图就很形象的表明了这个过程
3.实现
public class SortTest1 {
//归并排序
//分离
public static void mergeSort(int[] array,int start,int end,int[] tempArry){
if(start >= end){
return;
}
int mid = (end + start)/2;
mergeSort(array,start,mid,tempArry);
mergeSort(array,mid+1,end,tempArry);
merge(array,start,mid,end,tempArry);
}
//合并
public static void merge(int[] array,
int start,int mid,int end,int[] tempArry) {
//建立临时数组存储排序以后的值
// int[] tempArray = new int[array.length];
//临时数组的头为start
int temIndex = start;
int i = start;
//mid指向第二个数
int s2 = mid + 1;
while (start <= mid && s2 <= end) {
if (array[start] <= array[s2]) {
tempArry[temIndex++] = array[start++];
} else {
tempArry[temIndex++] = array[s2++];
}
}
while (start <= mid) {
tempArry[temIndex++] = array[start++];
}
while (s2 <= end) {
tempArry[temIndex++] = array[s2++];
}
//将临时数组的值全部放入array数组
while (i <= end) {
array[i] = tempArry[i];
i++;
}
}
//测试
public static void main(String[] args) {
int[] array = new int[100];
int[] tmpArray = new int[array.length];
Random random = new Random();
for (int i = 0; i < array.length ; i++) {
array[i] = random.nextInt(100)+1;
}
mergeSort(array,0,99,tmpArray);
System.out.println(Arrays.toString(array));
}
}