`

快速排序java代码(算法导论第7章)

阅读更多
其原理见附件图形,代码如下:
package yangkunlin.algorithm.sort;

import yangkunlin.algorithm.tool.SortTool;

public class QuickSort {
	
	/**
	 * 快速排序
	 * 最坏运行时间O(n^2);期望运行时间O(nlgn)
	 * 实现就地排序
	 * @param source
	 */
	public void quickSort(int[] source){
		quickSort(source, 1, source.length);
	}
	
	/**
	 * 快速排序 
	 * 对source的p到r进行排序。p、r为数组从1数起。包含source[p-1]、source[r-1]
	 * @param source 待排序数组
	 * @param p 排序起始点 
	 * @param r 排序终止点
	 */
	public void quickSort(int[] source, int p ,int r){
		if(p < r){
			int q = partition(source, p, r);
			quickSort(source, p, q-1);
			quickSort(source, q+1, r);
		}
	}

	/**
	 * 数组source划分为 <= 第r元素的和>r元素的两个区域。并返回分治点的位置。
	 * 对source进行就地重排
	 * @param source
	 * @param p
	 * @param r
	 * @return
	 */
	public int partition(int[] source, int p, int r) {
		int pivotElement = source[r-1]; //支点元素
		int i = p-2; //大于支点元素集的起点元素所在位
		for(int j = p-1 ; j <= r-1; j++  ){
			if(source[j] <= pivotElement ){
				i++;
				SortTool.exchange(source, i, j);
			}
		}
		return i;
	}

	
}

  • 大小: 83.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics