归并排序

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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值