java实现快速排序

快速排序是平均速度最快的排序算法,他的平均时间复杂度 n*log n)

图片来源 维基百科

快速排序采用分治法来进行排序,首先先给出一个数组,在一开始随意选择一个数pivot,已pivot作为这个数组的分界点,把大于pivot的数放在右边,小于pivot的数放在左边,然后在已pivot的两边分界点,右进行一次上一次的操作,这样就能达到排序的目的了,

好了,我们来看一下代码。

private static void partition(int[] array,int left,int right) {//这里是传递的数组与最左边点与最右边点
        int i = left,j=right;
        int pivot =array[(left+right)/2];//我们已将这个数组的最中间的值作为分界点

        while (i<=j) {  //当中间的值与两边的值比较与交换完,结束循环,递归另外两个被分割的数组

        while (array[i]<pivot) {//从传递进来的最左边开始如果array[i]小于中间值就那么下边就往右 移动一次
            i++;
        }
        while (array[j]>pivot) {
        //如果array[j]大于中间值就那么下边就往左 移动一次
            j--;

        }
        if (i<=j) {//当已中间值为分界点的两边,没有比较完就交换

            int temp=array[i];
            array[i]=array[j];
            array[j]=temp;
            i++;
            j--;
            /*
            *如果两边都满足了条件就交换位置,然后位置都向前移动
            */

        }

        }   
        //第一次中间点比较完之后,就要开始比较另外两边了
        if (left<j) {

            partition(array, left, j);

        }
        if (i<right) {
            partition(array, i, right);

        }


    }

这段代码就是快速排序了,我们对这个数组进行了,分治法,首先把一个数组分成两个数组,两个数组要中间值对两个数比较完了之后又会把这和两个交换完的数组分成4个数组,进行找中间值,比较操作。

我们来看一下结果

这就是运行结果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值