快速排序_JAVA_编程开发_程序员俱乐部

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

快速排序

 2013/12/6 21:26:54  zhuyufufu  程序员俱乐部  我要评论(0)
  • 摘要:快速排序(Quicksort)是对冒泡排序的一种改进。由C.A.R.Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。Java代码实现示例:packagecom.zas.algorithm;importjava.util.Arrays
  • 标签:快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

Java代码实现示例:

class="java" name="code">
package com.zas.algorithm;

import java.util.Arrays;

/**
 * 快速排序
 * @author zas
 */
public class QuickSort {
	
	/**
	 * @param data
	 */
	public static void sort(int[] data) {
		quickSort(data, 0, data.length - 1);
	}

	/**
	 * @param data
	 * @param i
	 * @param j
	 */
	private static void quickSort(int[] data, int i, int j) {
		int pivotIndex = (i + j) / 2;
		// swap
		QuickSort.swap(data, pivotIndex, j);

		int k = partition(data, i - 1, j, data[j]);
		QuickSort.swap(data, k, j);
		if ((k - i) > 1) {
			quickSort(data, i, k - 1);
		}
		if ((j - k) > 1) {
			quickSort(data, k + 1, j);
		}

	}

	/**
	 * 根据轴元素大小将数组分到其两边
	 * @param data
	 * @param leftIndex
	 * @param rightIndex
	 * @param pivot
	 * @return
	 */
	private static int partition(int[] data, int leftIndex, int rightIndex, int pivot) {
		do {
			while (data[++leftIndex] < pivot) {
			}
			while ((rightIndex != 0) && data[--rightIndex] > pivot) {
			}
			QuickSort.swap(data, leftIndex, rightIndex);
		} while (leftIndex < rightIndex);
		
		QuickSort.swap(data, leftIndex, rightIndex);
		return leftIndex;
	}
	
	public static void swap(int[] data, int i, int j) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }

	/**
	 * @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 };
		QuickSort.sort(a);
		System.out.println(Arrays.toString(a));
	}

}


快速排序的思想是: 将数组分为两部分,其中一部分所有元素比另一部分所有元素都小,然后分治。
上一篇: 保存Java代理框架生成的类文件。 下一篇: 没有下一篇了!
发表评论
用户名: 匿名