快速排序 2022.01.03

快速排序的基本思想:先确定一个中轴值,然后分别从左右两端开始往中间遍历,在遍历的过程中将比中轴值大的放在右边,比中轴值小的放在左边;然后在利用递归的思想将左右两边分别进行快速排序即重复上面操作。

快速排序执行结果:

 快速排序代码:

package DataStructures.sort;

import java.util.Arrays;

/*
    快速排序
 */
public class QuickSort {

    static int count = 0;

    public static void main(String[] args) {
        int[] nums = {-9,78,0,23,-567,70};
        System.out.println("快速排序前:"+ Arrays.toString(nums));
        quickSort(nums,0,nums.length-1);
//        System.out.println("快速排序后:"+ Arrays.toString(nums));
    }

    //快速排序
    public static void quickSort(int[] nums, int left, int right){
        int l = left;
        int r = right;
        int pivot = nums[(left+right)/2];

        int temp = 0;
        while( l < r ){
            //在左边找比中轴值大的值
            while (nums[l] < pivot ){
                l++;
            }
            //在右边找比中轴值小的值
            while ( nums[r] > pivot ){
                r--;
            }

            if( l >= r ){
                break;
            }

            temp = nums[l];
            nums[l] = nums[r];
            nums[r] = temp;

            count++;
            System.out.println("第"+count+"次快排:"+Arrays.toString(nums));

            if( nums[r] == pivot ){
                r--;
            }

            if( nums[l] == pivot ){
                l++;
            }
        }

        //防止栈溢出
        if( l == r ){
            l++;
            r--;
        }

        //左递归
        if( left < r ){
            quickSort(nums,left,r);
        }
        //右递归
        if( right > l ){
            quickSort(nums,l,right);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值