归并排序
来源:互联网 发布:编程器使用方法 编辑:程序博客网 时间: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;
}
}
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
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 好了,被百度地图的配置坑了一中午,做个总结吧
- 运用循环输出一个空心的菱形
- 事件(三)
- Android闪光灯实现
- poj2367(拓扑排序)
- 归并排序
- 排序算法(七) 堆排序
- VIM for windows
- JAVA养成计划——每天学一点JAVA
- 关于中文乱码这坑
- 一道常被人轻视的前端JS面试题
- IOS的基本控件的使用-UIViewController基础
- 从0开始学习 GITHUB 系列之「初识 GITHUB」
- 快速排序