您的位置:首页 > 编程语言 > Java开发

归并排序

2015-10-14 23:02 489 查看

一.基本思想

归并(Merge)排序法是将待排序序列分为若干个子序列,对每个子序列进行排序,然后再把有序子序列合并为整体有序序列。

二.归并排序示例



三.归并排序的Java实现

/**
* 归并排序
* @param array
*/
public static void mergeSort(int[] array){
sort(array,0,array.length-1);
}

/**
* 排序
* @param array
* @param left
* @param right
*/
public static void sort(int[] array, int left, int right){
if(left >= right){
return; //递归出口
}
//分割
int mid = (left+right)/2;
sort(array,left,mid);
sort(array,mid+1,right);
//合并
merge(array,left,mid,right);
printArray(array);
}

/**
* 合并
* @param array
* @param left
* @param mid
* @param right
*/
public static void merge(int[] array, int left, int mid, int right){
int[] tempArr = new int[array.length];  //临时数组,存储排序好的数组
int index=left;//临时数组的下标
int center = mid+1;//右边第一个元素的下标
int first = left;//缓存数组第一个元素的下标
while(left<=mid && center<=right){
if(array[left] < array[center]){
tempArr[index++] = array[left++];
}else{
tempArr[index++] = array[center++];
}
}
//将剩余的部分放入数组,下面的两个while只有执行其中一个
while(left<=mid){
tempArr[index++] = array[left++];
}
while(center<=right){
tempArr[index++] = array[center++];
}
//      //将临时数组的内容拷贝到需要排序的数组中
while(first<=right){
array[first] = tempArr[first++];
}
}


四.效率

O(nlgn)

五.应用场景

适用与外部排序。

外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息