快速排序总结

关于快速排序,首先要理解快速排序的原理,快速排序首先要找一个基准,根据此基准将数据分为两部分,比基准小的数据在基准的左边,比基准大的数据放在基准的右边,然后再根据起始点位置进行索引,运用递归,重复进行分组,一般选择第一个数据,所以首先需要对大的那一部分进行排序。代码如下

public class QuickSort {
    /**
     * 快速排序算法
     * @param data 目标数组
     * @param start 起始位
     * @param end 结束位
     */
    public static void quickSort(int[] data,int start,int end){
        //设置关键数据key为要排序数组的第一个元素
        //即第一趟排序后,key的右边的数全部比key大,key左边的数全部比key小
        int key = data[start];
        //设置数组左边的索引,往右移动比key大的数
        int i = start;
        //设置数组右边的索引,往左移动比key小的数
        int j = end;
        //如果左边的索引比右边索引小,则还有数据没有排序
        while (i<j){
            while (data[j] > key && j > i){
                j--;
            }
            data[i] = data[j];

            while (data[i] < key && i < j){
                i++;
            }
            data[j] = data[i];
        }
        //此时i==j
        data[i]=key;
        //递归调用
        if (i-1>start){
            //递归调用,把key前面的完成排序
            quickSort(data,start,i-1);
        }
        if (i+1<end){
            //递归调用,把key后面的完成排序
            quickSort(data,i+1,end);
        }
    }

    public static void main(String[] args){
        int[] p={34, 21, 54, 18, 23,76, 38, 98, 45, 33, 27, 51, 11, 20, 79,
                30, 89, 41};
        long start = System.currentTimeMillis();
        QuickSort.quickSort(p,0,p.length-1);//快速排序
        System.out.println("所用时间:" + (System.currentTimeMillis() - start));
        for (int i = 0;i<p.length;i++){
            System.out.println(p[i] + " ");
        }
    }
注意:红色标注的那两个while()循环语句不能颠倒,因为开始的基准选择的是第一个数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值