排序

快速排序详解

排序分类
冒泡排序
选择排序.
选择排序

Array 源码中用到的排序算法
1.什么叫快速排序
快速排序,假设排序的数组为array[0…n-1],首先任意选取一个数据(通常选用array[0])作为基准数据.将所有比它小的数据放到它的前面,所有比它大的数据放到它后面.从而确定该数据在排序后的位置.将上述过程称为一趟快速排序.然后读前后两个区间递归调用此过程.
这里的难点在于,如何实现将比基准数据小的数据放到前面,比基准数据大的数放在后面.
具体逻辑如此.首先从后往前看,假如碰到比基准数据小的数,则两者替换(此时基准数据后面的数都比它大),
代码示例如下

public static void quickSort(int[] array,int low,int high)
    {
        if(low>=high) return;
        int index=oneSort(array,low,high);
        quickSort(array,0,index-1);
        quickSort(array,index+1,high);
    }

    /**
     * 一趟排序,返回base基准值的下标
     * @param array
     * @param low
     * @param high
     * @return
     */
    private static int oneSort(int[] array, int low, int high) {


        //定义活动下标,当两者相等时即确定了基准值得下标
        int i=low,j=high;
        int base=array[i];

        while(i<j)
        {
            //首先从后往前找,比基准值小的元素
            while(array[j]>base)
            {
                j--;
            }
            //找到比基准值小的元素,两者进行替换
            if(array[j]<base)
            {
                base=array[j];
                array[j]=array[i];
                array[i]=base;
            }

            //从前往后找,找比基准值大的元素
            while(array[i]>base)
            {
                i++;
            }
            //找到比基准值小的数,两者进行替换
            if(array[i]<base)
            {
                base=array[i];
                array[i]=array[j];
                array[j]=base;
            }
        }



        return i;
    }

对于一趟排序,这里使用了两个下标i,j.其对应的排序前的第一个下标,与最后一个下标.之后在代码运用这两个下标,将基准值与所有值进行了比较.从而确定了基准数据的下标并返回.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值