`
lotusyu
  • 浏览: 33616 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

算法导论——快速排序

阅读更多
快速排序算法的思想来自于分治法(我的理解就是大事化小,小事化了)。
优点:速度快,内存占用小。
缺点:对于有序数组,耗时比较长(稳定性不够好)
实现步骤:
1:找出数组的最后位置的值(mid),不大于mid的,排在数组的前面,mid排在中间,比mid大的排在mid的后面(对应partition方法,返回mid的索引位置)。
2:将mid的前半部分做为子数组,递归调用步骤1;将mid的后半部分做为子数组,递归调用步骤1

实现代码:
import java.util.Comparator;

public class QuickSort<T> {

	private T[] array;

	private Comparator<? super T> comp;

	public QuickSort(T[] array, Comparator<? super T> comp) {
		this.array = array;
		this.comp = comp;
	}

	public void sort() {
		quicksort(0, array.length - 1);
	}

	private void quicksort(int p, int r) {
		if (p < r) {
			int q = partition(p, r);
			quicksort(p, q - 1);
			quicksort(q + 1, r);
		}
	}

	public int partition(int p, int r) {
		T x = array[r];
		int less = p - 1;
		for (int i = p; i < r; i++) {
			if (comp.compare(array[i], x) <= 0) {
				less++;
				swap(less, i);
			}
		}
		less++;
		swap(less, r);
		return less;
	}

	public void swap(int i, int j) {
		T tem = array[i];
		array[i] = array[j];
		array[j] = tem;
	}

	public static void main(String[] args) {
		Integer[] temp = new Integer[] { 9, 8, 7, 4, 3, 5, 6, 1 };
		QuickSort<Integer> qs = new QuickSort<Integer>(temp,
				new Comparator<Integer>() {
					public int compare(Integer o1, Integer o2) {
						return o1 - o2;
					}
				});
		qs.sort();
		qs.print();
	}

	private void print() {
		for (T i : array) {
			System.out.print(i + " ");
		}
		System.out.println();
	}
}
分享到:
评论

相关推荐

    算法导论中文版

    《算法导论》原书名——《Introduction to Algorithms》,是一本十分经典的计算机算法书籍,与高德纳(Donald E.Knuth)的《计算机程序设计艺术》(《The Art Of Computer Programming》)相媲美。 《算法导论》由...

    算法导论-麻省理工(中文)

    《算法导论》原书名——《Introduction to Algorithms》,是一本十分经典的计算机算法书籍,与高德纳(Donald E.Knuth)的《计算机程序设计艺术》(《The Art Of Computer Programming》)相媲美。 《算法导论》由...

    算法导论(中文)

    《算法导论》原书名——《Introduction to Algorithms》,是一本十分经典的计算机算法书籍,与高德纳(Donald E.Knuth)的《计算机程序设计艺术》(《The Art Of Computer Programming》)相媲美。 本书深入浅出,...

    算法导论第二版【扫描清晰版】+习题答案

    本书专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。本书还介绍了对强连通...

    OpenSAL1.1算法导论开源算法库

    OpenSAL1.1 包含了算法导论中所有数据结构和算法以及其他内容,本资源为该算法库的静态链接库 内容如下(*号表示1.1版本新增内容): 数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全...

    leetcode分类-leetcode:记录自己的LeetCode解题之路~

    快速排序(Quick Sort) —— 分而治之 递归 如何将问题分成 基线条件(Base Case) 和 递归条件(Recursive Case)~ 递归条件(Recursive Case) —— 指的是函数继续调用自己 基线条件(Base Case) —— 指的是函数不再调用...

    C++开源算法库OpenSAL1.1(Open Standardized Algorithm Library) ——静态链接库

    OpenSAL1.1 包含了算法导论中所有数据结构和算法以及其他内容,本资源为该算法库的静态链接库 内容如下(*号表示1.1版本新增内容): 数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全...

    C++开源算法库OpenSAL1.1(Open Standardized Algorithm Library)——动态链接库

    OpenSAL1.1 包含了算法导论中所有数据结构和算法以及其他内容,本资源为该算法库的动态链接库 内容如下(*号表示1.1版本新增内容): 数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全...

    并行计算导论(原书第2版).[美]Ananth Grama(带详细书签).pdf

    9.4.1 并行快速排序 9.4.2 用于CRCWPRAM的并行形式 9.4.3 用于实际体系结构的并行形式 9.4.4 主元选择 9.5 桶和样本排序 9.6 其他排序算法 9.6.1 枚举排序 9.6.2 基数排序 9.7 书目评注 习题 第10章 图...

    编程新手真言......

    6.19 快速排序思想 130 6.20 数据结构之数组 131 6.21 数据结构的抽象名字 132 6.22 真正的ADT 133 6.23 Vector的观点 135 6.24 真正的数据结构 136 6.25 堆栈与队列 138 6.26 真正的递归 140 6.27 树与单链表,图 ...

Global site tag (gtag.js) - Google Analytics