package com.gary.合并排序;
/**
* 合并排序算法是用分治策略实现对N个元素进行排序的算法。其基本思想是:<br>
* 将待排序元素分成大小大致相同 的两个子集合,分别 对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。<br>
* 主要思想:1.分治 : 将N个元素集合二分直到不能分为止<br>
*
*
*
* 2.合并:先合并到另一个临时的数组temp[]中。<br>
* 合并时候,比较值小的放入temp数组中,并且放入的那边位置++,继续比较<br>
* 直到值全部排好序到temp[]数组中后,将temp[]数组通过copy函数复制到原本的数组中去
* @author gary
*
*/
public class Merge {
/**
* 分治 : 将N个元素集合二分直到不能分为止<br>
*/
public void mergeSort(int[] arrays, int start, int end) {
if(start < end) {
int m = (start + end)/2;
mergeSort(arrays, start, m);
mergeSort(arrays, m+1, end);
combine(arrays, start, m, end);
}
}
/**
* 合并:先合并到另一个临时的数组temp[]中。<br>
*合并时候,比较值小的放入temp数组中,并且放入的那边位置++,继续比较<br>
*直到值全部排好序到temp[]数组中后,将temp[]数组通过copy函数复制到原本的数组中去
*/
private void combine(int[] arrays, int start, int m, int end) {
int length = end - start + 1;
int temp[] = new int[length];
int i = start;
int j = m+1;
int k = 0;
while(i <= m && j <= end) {
if(arrays[i] < arrays[j]) {
temp[k] = arrays[i];
i++;
k++;
} else {
temp[k] = arrays[j];
j++;
k++;
}
}
while(i <= m) {
temp[k] = arrays[i];
i++;
k++;
}
while(j <= end) {
temp[k] = arrays[j];
j++;
k++;
}
copy(arrays, start, end, temp);
}
private void copy(int[] arrays, int start, int end, int[] temp) {
int j = 0;
for(int i = start; i <= end; i++,j++) {
arrays[i] = temp[j];
}
print(arrays);;
}
private void print(int[] arrays) {
for(int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int a[] = {5,4,10,8,7,9,11,6,8,5,5};
new Merge().mergeSort(a, 0, a.length - 1);
}
}
基础算法之合并排序Java实现
最新推荐文章于 2024-06-22 22:33:47 发布
本文详细介绍了一种高效的排序算法——合并排序。该算法采用分治策略,将数组不断分为两半直至每个子数组只有一个元素,再将有序的子数组逐步合并为更大的有序数组。文中提供了完整的Java实现代码及示例。
1万+

被折叠的 条评论
为什么被折叠?



