标签:change flag while public quic quicksort ret java 需要
一、用泛型实现快排,可以传入不通类型进行排序,比如String数组,Integer数组。
/**
* 快速排序
*
* @author chx
*
*/
public class QuickSort {
/**
* 数组内数值的交换函数
*
* @param arr
* 原数组
* @param leftIndex
* 左索引
* @param rightIndex
* 右索引
*/
private static <T> void change(T[] arr, int leftIndex, int rightIndex) {
T temp = arr[leftIndex];
arr[leftIndex] = arr[rightIndex];
arr[rightIndex] = temp;
}
public static <T> void sort(T[] arr, int left, int right) {
if (right < left) {
// 查找区间内,外的返回
return;
}
T flag = arr[left];// 哨兵的值
int indexLeft = left;//本轮查找需要的左索引
int indexRight = right;//本轮查找需要的右索引
while (indexLeft != indexRight) {
// 开始从右向左找,找比哨兵小的值。或者直到遇到左索引
while (Integer.parseInt(arr[indexRight].toString()) >= Integer.parseInt(flag.toString()) && indexLeft < indexRight) {
indexRight--;
}
// 从左向右找,找到比哨兵大的值,或者直到遇到右索引
while (Integer.parseInt(arr[indexLeft].toString()) <= Integer.parseInt(flag.toString()) && indexLeft < indexRight) {
indexLeft++;
}
if (indexLeft < indexRight) {
// 找到了,交换
change(arr, indexLeft, indexRight);
}
}
// 此时一遍探索结束,将哨兵和当前的值进行交换,并进行分区探索
change(arr, left, indexLeft);
// 右边探索
sort(arr, indexRight + 1, right);
// 左边探索
sort(arr, left, indexLeft - 1);
}
}
标签:change flag while public quic quicksort ret java 需要
原文地址:https://www.cnblogs.com/chxwkx/p/11224954.html