快排算法

快排算法的思想是基于分治的,首先定义一个基准值,将待排序数组分成两块。前一块是比基准值小的,后一块是比基准值大的。将这个基准值排序到它应该的位置的时候,这个时候基准值的位置已经确定了,之后就采用递归的方式分别对基准值前后两块待排序的子数组进行相同方法的排序。

public void quickSort(int[] nums,int low,int high){
        if(low>=high){
            return;
        }
        int middle=findmiddle(nums,low,high);
        quickSort(nums,low,middle-1);
        quickSort(nums,middle+1,high);

    }
    public int findmiddle(int[] nums,int low,int high){
        int flag=nums[low];
        while(low<high){
            while(low<high && nums[high]>flag){
                high--;
            }
            //因为这里的num[low]已经被保存至flag当中,所以不用担心num[low]的值丢失,直接进行覆盖即可
            nums[low]=nums[high];
            while(low<high && nums[low]<=flag){
                low++;
            }
            //同理,high的值在发现有存在比flag小的值之后,就没有再进行变化了。
            //这里nums[high]的值已经复制给了num[low],所以当前带排序数组中存在两个与num[high]相等的值
            //因此可以直接对这个被抛弃的nums[high]覆盖。
            nums[high]=nums[low];
        }
        //此时low与high相遇,说明第一次排序完毕,基准值到了正确的位置。
        nums[low]=flag;
        return low;

    }

测试函数

public class Main {
    public static void main(String[] args) {
        Solution solution=new Solution();
        Scanner in=new Scanner(System.in);
        String[] strnums=null;
        strnums=in.nextLine().split(" ");
        int length=strnums.length;
        int[] nums=new int[length];
        for(int i=0;i<length;i++){
            nums[i]=Integer.valueOf(strnums[i]);
        }
        solution.quickSort(nums,0,nums.length-1);
        for(int i=0;i<nums.length;i++){
            System.out.print(nums[i]+" ");
        }

    }
}

posted @   Dreamer_szy  阅读(289)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示