`
beingshadow
  • 浏览: 5529 次
社区版块
存档分类
最新评论

一个讲的非常好的快速排序

 
阅读更多

【原文链接】http://developer.51cto.com/art/201403/430986.htm


讲的非常好,反正我是看懂了

package com.shadow.util;
/**
 * 快速排序的一个实现
 * @author shadow
 *
 */
public class MyQuickSort {

	private static int[] arr = null;
	/**
	 * 找基准点
	 * @param left
	 * @param right
	 */
	private static void quickSort(int left, int right) {
		int i, j, t, pivot;
		if (left > right)
			return;
		// pivot中存的就是基准数
		pivot = arr[left];
		i = left;
		j = right;
		while (i != j) {
			// 升序,所以先从右边开始找
			while (arr[j] >= pivot && i < j)
				j--;
			// 再找左边的
			while (arr[i] <= pivot && i < j)
				i++;
			// 交换两个数在数组中的位置
			if (i < j) {
				t = arr[i];
				arr[i] = arr[j];
				arr[j] = t;
			}
		}
		// 一次查找后,将基准数归位
		arr[left] = arr[i];
		arr[i] = pivot;

		// 继续处理左边的,这里是一个递归的过程
		quickSort(left, i - 1);
		// 继续处理右边的,这里也是一个递归的过程
		quickSort(i + 1, right);
	}
	
	public static void sort(int[] arr)
	{
		MyQuickSort.arr = arr;
		quickSort(0, arr.length-1);
	}
	
	public static void main(String[] args) {
		int[] a = {1,3,5,8,4,6,2};
		int[] b = {5,8,4,6,2,1,3};
		MyQuickSort.sort(a);
		for (int i : a) {
			System.out.print(i);
		}
		System.out.println();
		MyQuickSort.sort(b);
		for (int i : b) {
			System.out.print(i);
		}
	}
}
分享到:
评论

相关推荐

    新的快速排序算法 Dual-Pivot QuickSort阅读笔记

    快速排序是一种常用的排序算法,它的效率在许多情况下非常高。其核心思想是选择一个"枢轴"(pivot)元素,然后将数组分为两部分:一部分包含小于枢轴的元素,另一部分包含大于枢轴的元素。递归地对这两部分继续执行...

    12-快速排序.md

    快速排序属于分治法的范畴,其核心思想是选择一个基准值(pivot),将数组分为两部分,一部分包含所有小于基准值的元素,另一部分包含所有大于基准值的元素,然后递归地对这两部分继续进行排序。快速排序的时间...

    Python一行代码实现快速排序的方法

    快速排序的核心在于选择一个基准值(Pivot),并通过一系列操作将数组分为两部分:一部分的所有元素都小于基准值,另一部分的所有元素都大于基准值。这一过程称为分区(Partitioning)。分区完成后,对这两个子数组...

    数据结构教学课件:第九讲 内部排序3.ppt

    数据结构教学课件的第九讲主要探讨了内部排序方法中的快速排序算法。快速排序是一种高效的分治算法,由英国计算机科学家C.A.R. Hoare在1960年提出。其基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中...

    韩顺平javase的四种排序法(冒泡,选择,插入,快速)

    韩老师的javase的四种排序法,感觉讲的很好。自己整理了一下,保证无误,分享给大家。

    数据结构教学课件:第21讲 交换排序.pdf

    - 在实现中,快速排序通常使用两个指针,一个从后向前搜索小于枢轴的元素,另一个从前向后搜索大于枢轴的元素,当两个指针相遇时,完成一趟划分。 - 快速排序的效率较高,平均时间复杂度为O(n log n),即使在最坏...

    基本排序讲PPT学习教案.pptx

    而快速排序则是基于分治策略的交换排序,它通过选取一个基准元素,将数组分为两部分,一部分元素小于基准,另一部分大于基准,然后再对这两部分分别进行排序,以此递归进行,效率高于冒泡排序。 2. 插入排序: 插入...

    第四讲排序算法.doc

    一个好的排序算法应该在时间和空间上都尽可能高效,并且易于理解和实现。 排序算法的选择取决于具体的应用场景,不同的算法在不同条件下可能表现出不同的效率。例如,对于小规模数据,简单的插入排序可能是合适的,...

    排序动画二

    在这篇文章中,我们将深入探讨三种排序算法,它们是归并排序、快速排序以及希尔排序,这些内容都在"排序动画二"的资源包中以动画形式呈现。 首先,让我们来理解归并排序。归并排序是一种基于分治思想的排序算法。它...

    第10章内排序第7讲-內排序的比较.pptx

    1. **直接插入排序**:直接插入排序是一种简单的排序算法,它将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。时间复杂度在平均和最坏情况下都是O(n^2),而最好的情况是O(n),即输入已经...

    数据结构教学课件:第22讲 选择排序.pdf

    - 对于大数据量的排序,通常会选择更高效的排序算法,如快速排序、归并排序或堆排序等。 综上所述,选择排序是一种基础的排序方法,其主要特点是算法实现简单,但效率相对较低,不适合作为处理大量数据的首选排序...

    Java各种排序算法.pdf

    快速排序是一种高效的排序算法,它的工作原理是通过选择一个pivot,将所有记录分成两个部分,然后递归地对每个部分进行排序。 快速排序的算法步骤如下: 1. 选择一个pivot。 2. 将所有记录分成两个部分,小于pivot...

    第一讲-编程快速入门1.rar

    在“第一讲-编程快速入门1.rar”这个压缩包中,我们很显然会发现它是一个针对初学者设计的编程入门教程。尽管没有提供具体的标签,我们可以根据常见的编程基础概念来推测其可能涵盖的内容。通常,编程快速入门课程会...

    课程设计,数据结构内部排序的算法比较

    快速排序是一种分治策略的体现,它通过选取一个基准元素,并以此基准将数组分为两个部分,使得左边所有元素都不大于基准,右边所有元素都不小于基准,然后递归地对左右两边的子数组重复这一过程。快速排序平均时间...

    在CADENCE中将一个PCB复制到另一个PCB中

    在复杂的工程项目中,经常需要将一个已有的PCB设计快速复制到另一个PCB项目中,以节省时间和资源,减少重复劳动。本文将详细介绍如何在CADENCE中实现这一功能。 #### 二、准备工作 在开始复制PCB设计之前,首先需要...

    浙大 数据结构与算法60讲 网盘地址

    算法则是解决问题或执行任务的精确步骤,包括排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、搜索算法(深度优先搜索、广度优先搜索)、图算法(最短路径算法Dijkstra、最小生成树Prim或Kruskal...

    C#数据结构 排序 栈和栈的应用 树和二叉树 递归 例子

    此外,我们还会学习到经典的排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序等,它们各有优劣,理解其工作原理对于优化代码性能至关重要。 接下来是栈和栈的应用。栈是一种后进先出(LIFO)的数据...

    mysql学习资料 45讲 深度学习

    无索引时,数据可能需要在内存中临时排序,或者在磁盘上创建一个临时文件进行排序,这会显著影响查询性能。了解如何有效利用索引优化`ORDER BY`对于提升查询速度至关重要。 2. **MySQL是怎么保证主备一致性的?** ...

    韩顺平PHP149讲笔记之基本语法2

    快速排序由C.A.R. Hoare在1960年提出,其基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。...

Global site tag (gtag.js) - Google Analytics