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实现的选择排序算法,这是一种简单直观的排序算法,适合新手学习。 选择排序(Selection Sort)的基本思想是,在未排序的序列中找到最小(或最大)的元素,放到序列的起始位置,然后再从剩余未...
本文主要介绍了一种基于Java的按位拆分快速排序算法,旨在解决计算机科学中最重要的研究问题之一,即排序问题。传统的排序算法如冒泡排序算法、选择排序算法等,其运算效率不高,且其数据对象的适应范围受到限制。...
插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常生活中整理扑克牌的过程。Java中常见的插入排序实现有三种:直接插入排序、折半插入排序和希尔排序。 1. **直接插入排序**: 直接插入排序的基本...
在实际应用中,根据数据规模和特定场景,可能需要选择更适合的排序算法,例如快速排序、归并排序或者堆排序等,这些高级排序算法在处理大数据集时往往能提供更好的性能。了解和掌握这些算法,有助于提升JAVA程序员的...
在编程领域,排序算法是数据结构与算法学习中的重要组成部分,尤其在Java中,掌握各种排序算法对于优化程序性能至关重要。以下将详细讲解标题和描述中提到的五种排序算法:选择排序、插入排序、自顶向上合并排序、...
在编程领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在Java这样的高级编程语言中。这些算法用于整理一组数据,使其按照特定顺序排列,如升序或降序。以下将详细介绍Java中几种常见的排序算法: 1. ...
插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常生活中整理扑克牌的过程。算法分为两个阶段:遍历待排序的数组,将每个元素插入到已排序部分的正确位置。在Java中,可以使用两层循环实现插入排序,...
快速排序是一种高效的排序算法,采用分治策略。选取一个基准值,将数组分为两部分,一部分所有元素都小于基准,另一部分所有元素都大于基准,然后对这两部分递归进行快速排序。Java实现时需创建递归函数,处理基准值...
直接插入排序是一种基础且简单的排序算法,它的工作原理类似于我们日常生活中的整理扑克牌。在Java中实现这个算法,我们可以从以下几个关键知识点入手: 1. **基本思想**:直接插入排序是通过构建有序序列,对于未...
插入排序是一种简单直观的排序算法,它的工作原理类似于人们整理扑克牌。在Java中,我们可以创建一个方法,遍历数组,将每个元素与前面已排序的部分进行比较,找到合适的位置并插入。InsertionSort.java文件应该包含...
Java作为一种广泛使用的编程语言,提供了丰富的内置排序方法,如Arrays类中的sort()方法,但了解并实现基本的排序算法有助于理解其工作原理,提高编程能力。以下是标题和描述中提到的一些Java排序算法的详细解释: ...
本资源包含了一系列的Java实现的排序算法,旨在帮助开发者深入理解并掌握这些算法。 首先,让我们详细探讨一下Java中的几种常见排序算法: 1. **冒泡排序**:这是一种简单的交换排序方法,通过不断比较相邻元素并...
在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在Java中,掌握不同的排序算法对于优化程序性能至关重要。本资源包含了七种经典的排序算法实现,它们分别是冒泡排序、插入排序、递归排序(这里可能是指...
在Java编程语言中,排序算法是数据结构与算法领域中的重要组成部分。它们用于对一组数据进行整理,使得数据按照特定顺序排列。在这个示例中,我们看到了三种经典的排序算法:选择排序(Selection Sort),冒泡排序...
插入排序是一种简单直观的排序算法,它的工作原理类似于我们手动整理扑克牌。在已排序的部分中找到新元素的正确位置,并将其插入。DirectInsertSort.java文件包含了此算法的实现。对于小规模数据或部分有序的数据,...
在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,它使得数据按照特定顺序排列,如升序或降序。本篇将深入探讨Java中的一些经典排序...
插入排序是一种简单直观的排序算法,它的工作原理类似于我们手动整理扑克牌。将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置。Java中实现插入排序通常使用两个嵌套...