`

Java快速排序算法整理(一)

阅读更多
package boke.sort;

/**
 * 快速排序
 * 
 * @since jdk1.5及其以上
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.24
 * 
 */
public class QuickSort {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int maxSize = 10000;
		QuickSort bs = new QuickSort(maxSize);

		for(int i = 1; i <= 1000; i++) {
			int v = (int) (Math.random()*1000);
			bs.insert(v);
		}
		bs.output(); // 原始输出
		bs.quickSort(); // 排序
		bs.output(); // 排序输出

	}

	private long[] a; // 整型数据容器
	private int nElems; // 元素个数

	/**
	 * 构造方法
	 * 
	 * @param maxSize
	 */
	public QuickSort(int maxSize) {
		a = new long[maxSize];
		nElems = 0;
	}

	/**
	 * 容器放入数据
	 * 
	 * @param value
	 */
	public void insert(long value) {
		a[nElems++] = value;
	}

	/**
	 * 输出容器数据
	 */
	public void output() {
		for (int j = 0; j < nElems; j++) {
			System.out.print(a[j] + " ");
		}
		System.out.println("");
	}

	/**
	 * 快速排序
	 */
	public void quickSort() {
		recQuickSort(0, nElems - 1);
	}

	/**
	 * 快速排序
	 * 
	 * @param left
	 * @param right
	 */
	private void recQuickSort(int left, int right) {
		if (right - left <= 0) {
			return;
		} else {
			long pivot = a[right]; // 最右边的元素
			int partition = partitionIt(left, right, pivot);
			recQuickSort(left, partition - 1); // 左段排序
			recQuickSort(partition + 1, right); // 右段排序
		}
	}

	/**
	 * 快速排序
	 * 
	 * @param left
	 * @param right
	 * @param pivot
	 * @return
	 */
	private int partitionIt(int left, int right, long pivot) {
		int leftPtr = left - 1;
		int rightPtr = right;

		while (true) {
			while (a[++leftPtr] < pivot) {
				;
			}

			while (rightPtr > 0 && a[--rightPtr] > pivot) {
				;
			}

			if (leftPtr >= rightPtr) {
				break;
			} else {
				swap(leftPtr, rightPtr);
			}
		}
		swap(leftPtr, right);
		return leftPtr;
	}

	/**
	 * 交换
	 * 
	 * @param leftPtr
	 * @param rightPtr
	 */
	private void swap(int leftPtr, int rightPtr) {
		long temp = a[leftPtr];
		a[leftPtr] = a[rightPtr];
		a[rightPtr] = temp;

	}
}
分享到:
评论

相关推荐

    Java排序算法详细整理

    【Java排序算法详细整理】 在计算机科学中,排序算法是用于对一组数据进行排列的算法。在Java中,实现各种排序算法有助于理解数据结构和算法的原理,同时也能提高编程能力。以下是对Java中常见的几种排序算法的详细...

    Java选择排序算法源码

    本主题将深入探讨Java实现的选择排序算法,这是一种简单直观的排序算法,适合新手学习。 选择排序(Selection Sort)的基本思想是,在未排序的序列中找到最小(或最大)的元素,放到序列的起始位置,然后再从剩余未...

    基于Java按位拆分快速排序算法的数值仿真.pdf

    本文主要介绍了一种基于Java的按位拆分快速排序算法,旨在解决计算机科学中最重要的研究问题之一,即排序问题。传统的排序算法如冒泡排序算法、选择排序算法等,其运算效率不高,且其数据对象的适应范围受到限制。...

    java实现常见排序算法

    插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常生活中整理扑克牌的过程。Java中常见的插入排序实现有三种:直接插入排序、折半插入排序和希尔排序。 1. **直接插入排序**: 直接插入排序的基本...

    JAVA经典算法收集整理

    在实际应用中,根据数据规模和特定场景,可能需要选择更适合的排序算法,例如快速排序、归并排序或者堆排序等,这些高级排序算法在处理大数据集时往往能提供更好的性能。了解和掌握这些算法,有助于提升JAVA程序员的...

    java 排序算法 选择排序,插入排序,自顶向上合并排序,合并排序,快速排序

    在编程领域,排序算法是数据结构与算法学习中的重要组成部分,尤其在Java中,掌握各种排序算法对于优化程序性能至关重要。以下将详细讲解标题和描述中提到的五种排序算法:选择排序、插入排序、自顶向上合并排序、...

    Java实现排序算法

    在编程领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在Java这样的高级编程语言中。这些算法用于整理一组数据,使其按照特定顺序排列,如升序或降序。以下将详细介绍Java中几种常见的排序算法: 1. ...

    Java常用排序算法

    插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常生活中整理扑克牌的过程。算法分为两个阶段:遍历待排序的数组,将每个元素插入到已排序部分的正确位置。在Java中,可以使用两层循环实现插入排序,...

    java-排序算法总结

    快速排序是一种高效的排序算法,采用分治策略。选取一个基准值,将数组分为两部分,一部分所有元素都小于基准,另一部分所有元素都大于基准,然后对这两部分递归进行快速排序。Java实现时需创建递归函数,处理基准值...

    Java直接插入排序算法源码

    直接插入排序是一种基础且简单的排序算法,它的工作原理类似于我们日常生活中的整理扑克牌。在Java中实现这个算法,我们可以从以下几个关键知识点入手: 1. **基本思想**:直接插入排序是通过构建有序序列,对于未...

    Java实现常用排序算法

    插入排序是一种简单直观的排序算法,它的工作原理类似于人们整理扑克牌。在Java中,我们可以创建一个方法,遍历数组,将每个元素与前面已排序的部分进行比较,找到合适的位置并插入。InsertionSort.java文件应该包含...

    几个JAVA的排序算法

    Java作为一种广泛使用的编程语言,提供了丰富的内置排序方法,如Arrays类中的sort()方法,但了解并实现基本的排序算法有助于理解其工作原理,提高编程能力。以下是标题和描述中提到的一些Java排序算法的详细解释: ...

    Java各种排序算法代码

    本资源包含了一系列的Java实现的排序算法,旨在帮助开发者深入理解并掌握这些算法。 首先,让我们详细探讨一下Java中的几种常见排序算法: 1. **冒泡排序**:这是一种简单的交换排序方法,通过不断比较相邻元素并...

    Java 七种排序算法实现

    在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在Java中,掌握不同的排序算法对于优化程序性能至关重要。本资源包含了七种经典的排序算法实现,它们分别是冒泡排序、插入排序、递归排序(这里可能是指...

    Java排序算法!经典算法

    在Java编程语言中,排序算法是数据结构与算法领域中的重要组成部分。它们用于对一组数据进行整理,使得数据按照特定顺序排列。在这个示例中,我们看到了三种经典的排序算法:选择排序(Selection Sort),冒泡排序...

    java实现的4种排序算法(冒泡、快速、插入、选择)

    插入排序是一种简单直观的排序算法,它的工作原理类似于我们手动整理扑克牌。在已排序的部分中找到新元素的正确位置,并将其插入。DirectInsertSort.java文件包含了此算法的实现。对于小规模数据或部分有序的数据,...

    排序算法 Java经典算法

    在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,它使得数据按照特定顺序排列,如升序或降序。本篇将深入探讨Java中的一些经典排序...

    3种排序算法(快速、二路归并、插入)java

    插入排序是一种简单直观的排序算法,它的工作原理类似于我们手动整理扑克牌。将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置。Java中实现插入排序通常使用两个嵌套...

Global site tag (gtag.js) - Google Analytics