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接口。
分享到:
相关推荐
快速排序的基本思想是选取一个基准元素,将数组分为两部分,一部分的所有元素都比基准小,另一部分的元素都比基准大,然后对这两部分再分别进行快速排序,直到所有元素都在正确的位置上。 2. **归并排序**:由John ...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
本篇文章将详细解析Java中常见的排序方法,结合"javaeye 收集的java排序小结"资料,旨在帮助读者理解和掌握这些排序算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,通过重复遍历数组,比较...
快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法....
在实际编程中,Java提供了一个内置的`Arrays.sort()`方法,它使用了更高效的排序算法,如快速排序、归并排序等,对于大数据集,效率远高于冒泡排序和选择排序。`Arrays.sort()`可以轻松地对数组或列表进行升序或降序...
在Java中实现快速排序,我们通常会定义一个`quickSort()`方法,该方法接受一个整数数组作为参数。快速排序的核心在于选择一个基准元素(pivot),并重新排列数组使得所有小于基准的元素都在其前,所有大于基准的元素...
"快速排序算法java代码" 快速排序算法是由Tony Hoare在1960年提出的一种排序算法,它的平均时间复杂度为O(n log n),是目前最快的排序算法之一。下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的...
快速排序是一种广泛使用的排序算法,由C.A.R. Hoare在1960年提出。它的核心思想是分而治之(Divide and Conquer),将一个大问题分解成两个或多个相同...在实际编程中,快速排序经常被用作排序大量数据的首选算法之一。
java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!
在Java中实现快速排序,通常会用到递归。下面我们将深入探讨快速排序的步骤、优点、缺点以及如何在实际代码中实现。 ### 步骤 1. **选择基准**:首先,我们需要选择一个元素作为基准。这可以是数组的第一个元素,也...
SS系统软件设计说明书详细阐述了Java排序方法的实现与应用,是J-car项目的重要文档。文档的目的是为了明确SS系统的设计规格,特别是其中涉及到的排序功能。本文档适用于所有参与SS系统开发、测试和维护的人员,以及...
`quicksort.java`文件应包含快速排序的主逻辑,包括分区操作和递归调用。 3. **归并排序**: 归并排序是另一种基于分治策略的排序算法,由John von Neumann于1945年提出。它将数组分为两个子数组,分别进行排序,...
Java中,快速排序的核心在于“分区”操作。 5. **归并排序**(Merge Sort): 归并排序也是一种分治算法,它将数组不断分割成两个子数组,然后将子数组排序后再合并。在Java中,一般使用递归实现,适用于大数据量的...
Java排序方法是编程中不可或缺的一部分,它涉及到一系列的算法,用于将数组或列表中的元素按照特定顺序排列。这里我们将深入探讨几种常见的排序方法,包括直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序...
总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...
在JAVA中,实现这两种排序算法可以使用面向对象的特性,创建一个类如`MaopaoKuaisu.java`,在这个类中定义两个方法,分别实现冒泡排序和快速排序。类的结构可能如下: ```java public class MaopaoKuaisu { public...
在这个"快速排序示例代码(JAVA版)"中,我们可以期待看到以下关键知识点: 1. **分治策略**:快速排序的核心在于将大问题分解为小问题来解决。在Java代码中,会有一个主函数作为入口,调用递归函数来执行排序过程。 ...
JAVA实现快速排序 快速排序是一种高效的排序算法,它的实现可以分为两个部分:基本思想和复杂度分析。在基本思想中,快速排序采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,直到序列中的所有记录均...
总之,这个Java实现的快速排序演示项目不仅提供了排序算法的实现,还考虑到了教育和演示的需求,通过可视化工具帮助用户更好地理解和学习快速排序的工作机制。通过深入研究这个项目,可以加深对快速排序以及分治策略...