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

本文介绍了一个使用Java实现的快速排序算法。通过递归的方式对数组进行排序,并详细展示了插入数据、输出原始数组、执行快速排序及输出排序后数组的过程。该实现采用了一个简单的基准值选择策略,即取数组最后一个元素作为基准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值