`
lotusyu
  • 浏览: 34350 次
  • 性别: 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();
	}
}
分享到:
评论

相关推荐

    算法导论————————————

    例如,排序算法章节包含了快速排序、归并排序、堆排序等经典算法,通过这些算法的实现,读者可以了解到如何有效地对数据进行排序。搜索算法部分则涉及深度优先搜索、广度优先搜索以及二分查找等,这些都是解决复杂...

    算法导论——教师手册

    《算法导论》是一部经典而全面的算法教材,适合计算机科学领域的本科生和研究生学习使用。本教师手册旨在为授课教师提供教学辅助资料,包括详细的讲义和解题指南等。 #### 二、章节内容详解 **1. 第2章:入门** -...

    算法导论——习题解答

    通过上述章节内容的概述,我们可以看出,《算法导论——习题解答》不仅是一本配套教材的习题解答集,更是一部系统学习算法设计与分析的宝贵资源。通过深入浅出的讲解和丰富的习题解答,本书能够帮助读者建立起坚实的...

    MIT算法导论——算法顶尖经典教材

    《MIT算法导论》是计算机科学领域的一部权威教材,由世界知名学府麻省理工学院(MIT)的专家编著。这本书深入浅出地介绍了算法设计与分析的基础理论,旨在帮助读者掌握解决复杂问题的关键技能。以下是该书涉及的一些...

    算法导论——Introduction to Algorithms

    从排序算法(如快速排序、归并排序)、搜索算法(如二分查找)、图算法(如Dijkstra最短路径算法)、动态规划(如背包问题)、贪心算法到NP完全问题等,几乎覆盖了所有重要的算法类型和设计策略。此外,还探讨了算法...

    算法导论——中文完整版

    书中的001.PDF可能涵盖了基础的算法概念,如排序算法,比如冒泡排序、选择排序、插入排序、快速排序以及归并排序,这些都是算法初学者必须掌握的基础知识。002.PDF可能涉及更高级的排序算法,例如堆排序和希尔排序,...

    算法导论——课后思考题

    #### 算法导论概览与重要性 《算法导论》是一本经典的计算机科学教材,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein共同编写。本书深入浅出地介绍了算法设计与分析的基本概念和...

    算法导论 课后解答 教师用书

    - **主题讲解**:从堆排序到快速排序,再到线性时间排序和中位数及顺序统计量,这一系列章节的讲座笔记全面覆盖了各种排序算法的原理和应用场景。 - **解决方案**:课后解答不仅提供了排序算法的实现细节,还深入...

    中科大算法导论课程实验 常见排序算法的实现与性能比较 报告

    描述部分指明了实验的目的和范围,要求对六种排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序、桶排序——进行实现并比较它们的性能。 #### 标签解读 标签“算法导论 排序算法”标明了该文档属于...

    MIT公开课——算法导论教材

    《MIT公开课——算法导论教材》是一份源自美国麻省理工学院(MIT)的珍贵教育资源,专注于教授计算机科学中的核心概念——算法。这份教材涵盖了排序、树和Hash等基础但至关重要的算法,对于学习和理解计算机科学的...

    算法导论习题解. \算法导论习题解.

    根据提供的文件信息,可以看出这是一份关于《算法导论》一书习题解答的手稿或文档。虽然部分内容不太清晰,但从目录和前言部分可以推测出文档的主要内容是围绕算法的基础概念、排序算法以及相关算法分析展开的。下面...

    算法导论(第2版)参考答案

    根据提供的信息,《算法导论(第2版)参考答案》这本书涵盖了计算机科学中算法的核心概念和技术,本书由多个章节组成,下面将详细解释各部分的关键知识点。 ### 第一部分:基础 #### 第一章:计算中算法的角色 - *...

    算法导论及课后习题与思考题答案.pdf

    - **主要内容**:介绍另一种重要的排序算法——快速排序。 - **重点知识点**: - 快速排序的分治策略。 - 不同划分方法的选择和实现。 - 最优情况、最坏情况和平均情况下的时间复杂度分析。 #### 第8章:线性...

    算法导论的教学配套ppt——中科大

    《算法导论》是中国科学技术大学开设的一门重要课程,旨在教授学生如何理解和设计高效的计算算法。这门课程的配套PPT深入浅出地讲解了算法的基础理论、分析方法以及实际应用,是学习算法的重要参考资料。以下是对这...

    算法导论-习题答案-含全部课后习题详细解答

    #### 算法导论-习题答案-含全部课后习题详细解答 **知识点概述:** 本资料为《算法导论》(第二版)一书的教师手册,提供了全书各章节课后习题的详细解答。该书由Thomas H. Cormen、Charles E. Leiserson、Ronald ...

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

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

    算法导论(第三版中文版)——高清扫遍版带书签

    《算法导论(第三版中文版)——高清扫遍版带书签》一书,作为计算机科学中算法研究的集大成之作,长久以来受到程序员、学生以及算法爱好者的广泛赞誉。此书并非单纯的算法陈列,而是通过系统性、深入浅出的方式,...

Global site tag (gtag.js) - Google Analytics