归并排序

来源:互联网 发布:编程器使用方法 编辑:程序博客网 时间:2024/06/04 18:57
package 排序;


public class MergeSort {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub


}
/**归并排序:将两个或两个以上有序合并成一个新的有序序列。即把待排序的序列跟个城若干个子序列,每个子序列都是有序的。
* @param left 数组开始下标
* @param right 数组末尾下标
*/
public static void mergeSort(int[] arr, int[] tempArray, int left, int right) {
if (left < right) {
int middle = (left + right) / 2;
mergeSort(arr, tempArray, left, middle);
mergeSort(arr, tempArray, middle + 1, right);
//将两个数组合并成一个
Merge(arr, tempArray, left, middle + 1, right);
}
}


/**
* @param letf 第一段的开始
* @param middle 第二段的开始
* @param righ 第二段的结束
*/
private static void Merge(int[] arr, int[] tempArray, int left, 
int middle,int right) {
int leftEnd = middle - 1;
int tempIndex = left;
int tempLength = right - left + 1;
while ((left <= leftEnd) && (middle <= right)) {
if (arr[left] <= arr[middle])
tempArray[tempIndex++] = arr[left++];
else
tempArray[tempIndex++] = arr[middle++];
}
while (left <= leftEnd)
tempArray[tempIndex++] = arr[left++];
while (middle <= right)
tempArray[tempIndex++] = arr[middle++];
for (int i = 0; i < tempLength; i++) {
arr[right] = tempArray[right];
right--;
}
}
public static void swap(int[] a, int i, int j) {
int tmp;
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
0 0
原创粉丝点击