`

Java排序方法之:快速排序

阅读更多
package com.liany.demo.sort;

import java.util.Random;

/**
 * 参考wiki源码写了一遍,并加了注释和自己的理解。
 * 
 * 步骤:
 * 1、取一随机位置的元素作为基准(pivot,或叫枢纽)
 * 2、将基准移到最后位置(方便数组的其它元素与之比较),将小于此基准的元素放到数组的前面,
         然后将基准移到所有比它小的元素的最大序号的下一个位置。
 * 3、将这个基准的新位置返回,并作为迭代的分割点。
 * 4、迭代比基准的前面、后面两个部分。
 * 
 * @author modiliany
 * @date: 2012-04-05
 */
public class MyQuickSort {

	private Random random = new Random();
	
	/**
	 * 交换
	 * @param array
	 */
	public void swap(int[] array, int i, int j){
		int temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}
	
	/**
	 * 查找枢纽的索引号
	 */
	public int getPivotIndex(int[] array, int begin, int end){
		int index = begin + random.nextInt(end-begin+1);
		int pivot = array[index];
		
		//把pivot换到最后
		swap(array, index, end);
		for(int i=index=begin; i < end; i++){
			if(array[i] < pivot){
				//index从0开始计算了,记录小于pivot的值
				//将小于pivot的值的元素移动到index位置
				swap(array, index++, i);
			}
		}
		swap(array, index, end);//将pivot放到所有比它小的元素的下一个位置(即此时的index位置)。
		
		return index;
	}
	
	/**
	 * 快速排序法(Divide and conquer)
	 * @param array 待排序的数据
	 * @param begin 开始序号
	 * @param end	最后一个元素的序号
	 */
	public void quickSort(int[] array, int begin, int end){
		if(end > begin){
			int index = getPivotIndex(array, begin, end);
			
			quickSort(array, begin, index-1);
			quickSort(array, index+1, end);
		}
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int [] array = {3, 1, 7, 5, 2, 9, 10, 4, 8, 6};
		
		MyQuickSort sort = new MyQuickSort();
		sort.quickSort(array, 0, array.length-1);
		
		//输出
		for(int val : array){
			System.out.println(val);
		}
		
	}

}


wiki:

http://zh.wikipedia.org/zh-cn/快速排序



这里为了简单和方便理解排序的原理,只用了int数组。对象要比较的话,可以自己实现Comparator接口。

 

 

 

分享到:
评论

相关推荐

    Java排序算法练习:1.快速排序 2.归并排序 3.插入排序 4.冒泡排序 5.选择排序 6.堆排序

    快速排序的基本思想是选取一个基准元素,将数组分为两部分,一部分的所有元素都比基准小,另一部分的元素都比基准大,然后对这两部分再分别进行快速排序,直到所有元素都在正确的位置上。 2. **归并排序**:由John ...

    JAVA排序算法: 直接插入,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序

    本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...

    Java排序小结:常用的排序方法

    本篇文章将详细解析Java中常见的排序方法,结合"javaeye 收集的java排序小结"资料,旨在帮助读者理解和掌握这些排序算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,通过重复遍历数组,比较...

    分别使用Java和Python实现快速排序算法.zip

    快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法....

    Java排序算法实现:冒泡与选择排序示例代码

    在实际编程中,Java提供了一个内置的`Arrays.sort()`方法,它使用了更高效的排序算法,如快速排序、归并排序等,对于大数据集,效率远高于冒泡排序和选择排序。`Arrays.sort()`可以轻松地对数组或列表进行升序或降序...

    快速排序算法的java实现

    在Java中实现快速排序,我们通常会定义一个`quickSort()`方法,该方法接受一个整数数组作为参数。快速排序的核心在于选择一个基准元素(pivot),并重新排列数组使得所有小于基准的元素都在其前,所有大于基准的元素...

    快速排序算法java代码

    "快速排序算法java代码" 快速排序算法是由Tony Hoare在1960年提出的一种排序算法,它的平均时间复杂度为O(n log n),是目前最快的排序算法之一。下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的...

    Java经典算法教程:快速排序-代码非常清晰小白也能看懂

    快速排序是一种广泛使用的排序算法,由C.A.R. Hoare在1960年提出。它的核心思想是分而治之(Divide and Conquer),将一个大问题分解成两个或多个相同...在实际编程中,快速排序经常被用作排序大量数据的首选算法之一。

    java代码-使用java解决java排序之-快速排序的问题的源代码

    java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!

    Java的快速排序法

    在Java中实现快速排序,通常会用到递归。下面我们将深入探讨快速排序的步骤、优点、缺点以及如何在实际代码中实现。 ### 步骤 1. **选择基准**:首先,我们需要选择一个元素作为基准。这可以是数组的第一个元素,也...

    java排序方法 java排序方法

    SS系统软件设计说明书详细阐述了Java排序方法的实现与应用,是J-car项目的重要文档。文档的目的是为了明确SS系统的设计规格,特别是其中涉及到的排序功能。本文档适用于所有参与SS系统开发、测试和维护的人员,以及...

    java实现的shell排序快速排序归并排序堆排序

    `quicksort.java`文件应包含快速排序的主逻辑,包括分区操作和递归调用。 3. **归并排序**: 归并排序是另一种基于分治策略的排序算法,由John von Neumann于1945年提出。它将数组分为两个子数组,分别进行排序,...

    JAVA各种排序方法及改良

    Java中,快速排序的核心在于“分区”操作。 5. **归并排序**(Merge Sort): 归并排序也是一种分治算法,它将数组不断分割成两个子数组,然后将子数组排序后再合并。在Java中,一般使用递归实现,适用于大数据量的...

    Java排序方法详解大全

    Java排序方法是编程中不可或缺的一部分,它涉及到一系列的算法,用于将数组或列表中的元素按照特定顺序排列。这里我们将深入探讨几种常见的排序方法,包括直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序...

    java 快速排序 折半查找的界面实现 (递归与分治法)

    总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...

    JAVA冒泡排序和快速排序算法

    在JAVA中,实现这两种排序算法可以使用面向对象的特性,创建一个类如`MaopaoKuaisu.java`,在这个类中定义两个方法,分别实现冒泡排序和快速排序。类的结构可能如下: ```java public class MaopaoKuaisu { public...

    快速排序示例代码(JAVA版)

    在这个"快速排序示例代码(JAVA版)"中,我们可以期待看到以下关键知识点: 1. **分治策略**:快速排序的核心在于将大问题分解为小问题来解决。在Java代码中,会有一个主函数作为入口,调用递归函数来执行排序过程。 ...

    JAVA实现快速排序

    JAVA实现快速排序 快速排序是一种高效的排序算法,它的实现可以分为两个部分:基本思想和复杂度分析。在基本思想中,快速排序采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,直到序列中的所有记录均...

    java实现快速排序演示

    总之,这个Java实现的快速排序演示项目不仅提供了排序算法的实现,还考虑到了教育和演示的需求,通过可视化工具帮助用户更好地理解和学习快速排序的工作机制。通过深入研究这个项目,可以加深对快速排序以及分治策略...

Global site tag (gtag.js) - Google Analytics