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

快速排序

时间:2018-06-23 13:10:22      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:pack   prot   个数   sort   cts   public   ble   break   快速排序   

此排序包括升序和降序

升序为例,从low(低位)到hight(高位),拿第一个作为基准值(benchmark)作比较,先从高位向低位找一个比基准值小的数(第j位),再从低位向高位找一个比基准值大的数(第i位),交换这两个数,就是数小的移向左边,数大的移向右边,直到i位和j位相等,把基准数插入该位置,然后递归low,i-1和i+1,hight,直到低位和高位相等。

请参考排序接口与抽象类(java)

package com.bsc.algorithm.sort.quick;

import com.bsc.algorithm.sort.inf.AbstractSort;

public class QuickSort<T extends Comparable<T>> extends AbstractSort<T> {

    private void sort(T[] data, int low, int hight, int cr) {
        if (low >= hight) {
            return;
        }
        int i = low;
        int j = hight;
        //基准值
        T benchmark = data[low];
        do {
            // cr == 1(升序)时,从高位向低位找一个数比benchmark小的
            while (i < j && compare(benchmark, data[j]) != cr) {
                j--;
            }
            // cr == 1时(升序),从低位向高位找一个数比benchmark大的
            while (i < j && compare(data[i], benchmark) != cr) {
                i++;
            }
            if (i < j) {
                //找到后交换两数,然后继续找
                swap(data, i, j);
            }else{
                //找不到就结束
                //此时i == j,data[i]和左边的数都比benchmark小,右边的数都比benchmark大
                break;
            }
        } while (true);
        data[low] = data[i];
        data[i] = benchmark;
        sort(data, low, i - 1, cr);
        sort(data, i + 1, hight, cr);
    }

    @Override
    protected void sort(T[] data, int cr) {
        sort(data, 0, data.length - 1, cr);
    }

}

 

快速排序

标签:pack   prot   个数   sort   cts   public   ble   break   快速排序   

原文地址:https://www.cnblogs.com/bsc2012/p/9216714.html

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