java快排泛型实现

Posted chxwkx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
  }
}

以上是关于java快排泛型实现的主要内容,如果未能解决你的问题,请参考以下文章

手撕C语言标准库qsort(自我实现简化高效版C风格泛型快排)

快排+java实现

快排--java实现

Java实现的各种排序算法(包括冒泡,快排等)

四中基本排序算法几Java实现(冒泡选择插入快排)

八大排序算法Java实现(下)-快排归排基数排序