归并排序_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 归并排序

归并排序

 2013/12/6 15:26:27  zhuyufufu  程序员俱乐部  我要评论(0)
  • 摘要:归并排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。Java代码实现:packagecom
  • 标签:
归并排序:
  归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
  归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。
  将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

  Java代码实现:
class="java" name="code">
package com.zas.algorithm;

import java.util.Arrays;

/**
 * 归并排序
 * @author zas
 */
public class MergeSort {
	public static int[] sort(int[] data) {
		if (null == data || data.length < 2) {
			return data;
		}
		int[] temp = new int[data.length];
		mergeSort(data, temp, 0, data.length - 1);
		return data;
	}

	private static void mergeSort(int[] data, int[] tempArray, int leftIndex, int rightIndex) {
		//取中间位置
		int middleIndex = (leftIndex + rightIndex) / 2;
		//退出条件
		if (leftIndex == rightIndex) {
			return;
		}
		mergeSort(data, tempArray, leftIndex, middleIndex);
		mergeSort(data, tempArray, middleIndex + 1, rightIndex);
		for (int i = leftIndex; i <= rightIndex; i++) {
			tempArray[i] = data[i];
		}
		int i1 = leftIndex;
		int i2 = middleIndex + 1;
		for (int currentIndex = leftIndex; currentIndex <= rightIndex; currentIndex++) {
			//归并的核心思想 从两个有序队列取出一个待排序的值,并将该值所在队列的索引计数器加一
			if (i1 == middleIndex + 1) {
				data[currentIndex] = tempArray[i2++];
			} else if (i2 > rightIndex) {
				data[currentIndex] = tempArray[i1++];
			} else if (tempArray[i1] < tempArray[i2]) {
				data[currentIndex] = tempArray[i1++];
			} else {
				data[currentIndex] = tempArray[i2++];
			}
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = { 5, 3, 6, 4, 1, 7, 3, 1, 9, 2, 8,5, 3, 6, 4, 1, 7, 3, 1, 9, 2, 8,5, 3, 6, 4, 1, 7, 3, 1, 9, 2, 8 };
		System.out.println(Arrays.toString(MergeSort.sort(a)));
		
	}
}


归并的核心思想: 从两个有序队列取出一个待排序的值,并将该值所在队列的索引计数器加一
  • 相关文章
发表评论
用户名: 匿名