码迷,mamicode.com
首页 > 编程语言 > 详细

java快排泛型实现

时间:2019-07-22 13:29:42      阅读:105      评论:0      收藏:0      [点我收藏+]

标签: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);
  }
}

java快排泛型实现

标签:change   flag   while   public   quic   quicksort   ret   java   需要   

原文地址:https://www.cnblogs.com/chxwkx/p/11224954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!