`
lukew
  • 浏览: 51795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

快速排序java实现

    博客分类:
  • J2ME
阅读更多

自从用了java排序基本上就是E.sort().. 今天需要自己实现一下排序, 居然费了半天劲.. 郁闷, 基础真的不扎实啊.. 写了个简单的数组快速排序总结复习一下, 随便贴上来得了. 希望过路的朋友指正.

另外, wikipedia介绍qicksort的条目还是比较详细的.
http://zh.wikipedia.org/w/index.php?title=快速排序&variant=zh-tw

快速排序是典型的使用分治策略的一种交换排序.

一次排序步骤:
得到中心点作为关键点(其他的得到关键点的方法要根据排序数组来决定, 由于关键点是用来比较的基准所以如果基准选择得当可以减少交换的次数, 从而提高算法效率 , 是比较有技巧的部分), 以该关键点元素作为基准, 从数组两头分别与之比较, 大的放右边,小的放左边,相等的无论哪边都成(干脆不动). 最后当遍历完数组一遍(即两头的标志指向同一个数组元素)时把关键点元素放到该位置(此时确定这里为分治点 ),完成一次排序.

对关键点左右两个子序列递归调用, 以子序列小于两个元素为退出递归条件. 完成整个数组的排序.

public class Quicksort {

	private int getPivot(int begin, int end) {

		return (begin + end) >> 1;
	}

	// 一次排序
	private int partition(int[] array, int begin, int end) {
		int pivot = getPivot(begin, end);
		int tmp = array[pivot];
		array[pivot] = array[end];
		while (begin != end) {
			while (array[begin] < tmp && begin < end)
				begin++;
			if (/* array[begin] > tmp && */begin < end) {
				array[end] = array[begin];
				end--;
			}
			while (array[end] > tmp && end > begin)
				end--;
			if (/* array[end] < tmp && */end > begin) {
				array[begin] = array[end];
				begin++;
			}
		}
		// 此时两个下标指向同一个元素.以这个位置左右分治(分治点)
		array[begin] = tmp;
		return begin;
	}

	private void qsort(int[] array, int begin, int end) {

		if (end - begin < 1)
			return;
		int pivot = partition(array, begin, end);
		qsort(array, begin, pivot);
		qsort(array, pivot + 1, end);
	}

	public void sort(int[] array) {
		qsort(array, 0, array.length - 1);
	}

	public static void main(String[] args) {
		int[] array = { 3, 2, 2, 2, 3, 1, 4, 5, 1 };
		new Quicksort().sort(array);
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + ", ");
		}
	}
}
 
分享到:
评论
1 楼 wcjhaoa 2010-08-25  
那个一次排序时的交换情况我想半天没明白你为什么要这样写的... 但是是正确的

相关推荐

    快速排序 java实现

    快速排序 java实现

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

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

    快速排序Java实现程序

    public static void quicksort(int[] array,int start, int end){ if(start&gt;=end) return; int middle=partition(array,start,end); quicksort(array,start,middle-1); quicksort(array,middle+1,end);...

    快速排序的java实现

    以下是一个简单的Java实现: ```java public class QuickSort { public int partition(int[] a, int i, int j) { int key = a[i]; while (i ) { while (i [j] &gt;= key) { j--; } a[i] = a[j]; while (i [i] ...

    算法之快速排序java实现代码案例

    快速排序的 Java 实现代码例子程序,需要的可以参考

    快速排序JAVA实现 - QuickSort.java

    快速排序 import java.util.Arrays; public class QuickSort { public static void quickSort(int[] arr) { if (arr == null || arr.length ) { return; } quickSort(arr, 0, arr.length - 1); } ...

    用java实现快速排序

    根据给定文件的信息,本文将围绕“用Java实现快速排序”的主题进行展开,不仅解析标题与描述中的核心知识点,还会对部分代码示例进行解读,最后结合这些信息给出一个完整的快速排序算法实现。 ### 快速排序算法简介...

    快速排序算法的java实现

    下面是一个简单的Java实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { // 找到基准元素的正确位置 int pivotIndex = partition(arr, low,...

    JAVA实现快速排序

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

    JAVA实现的快速排序

    ### JAVA实现的快速排序 #### 知识点详解 **一、快速排序算法介绍** 快速排序(Quick Sort)是一种非常高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归...

    快速排序 java代码

    java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码

    java实现快速排序

    下面是一个简单的Java实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { int pivotIndex = partition(arr, low, high); quickSort(arr, low...

    快排序的Java实现

    本篇将详细讲解如何使用Java实现快速排序。 首先,理解快速排序的步骤至关重要。快速排序的主要步骤包括: 1. **选择枢轴元素(Pivot Selection)**:在待排序的数组中选取一个元素作为枢轴,通常选择第一个或最后...

    java实现快速排序演示

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

    用JAVA语言实现的对数据的快速排序法

    根据给定文件中的标题、描述、标签...综上所述,通过对给定文件的分析,我们不仅理解了如何使用Java实现快速排序算法,还深入了解了该算法的工作原理、性能特点以及优化方法,这对于理解和掌握快速排序具有重要意义。

    java快速排序算法实现

    在Java中实现快速排序,我们可以定义一个名为`quickSort`的方法,该方法接受一个整型数组作为参数,以及两个整数作为边界,代表当前处理的子数组的范围。以下是快速排序的基本步骤: 1. **选择基准元素(Pivot)**...

    快速排序 Java 示例

    快速排序的简单实现程序,java编制,迭代法对数据组分区,知道简单的java基础,基本就可以看懂这个小程序了

    快速排序.java 使用java实现的代码

    快速排序 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码

    Java实现快速排序算法+编程知识+技术开发

    Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术...

Global site tag (gtag.js) - Google Analytics