2021-07-06

快速排序心得

开始写的时候还真的有点不理解个东西,其实当时主要是不清楚如果i或j
走到了flag上时,假定右边的j走到flag上,i还在左半边,当其与flag值进行交换后无法确定i与j之间的数是否满足大于flag,后来发现了这道代码的意思是flag的位置是随意的,他只要满足存在一个位置(这个位置不一定是原始flag值所在的位置,也不一定是falg转换之后的位置)使得他左侧小于等于flag,右侧大于flag就行了

洛谷

import java.util.Scanner;

public class Test {
    public static void sort(int p[],int l,int r){
        int flag = p[(l + r) / 2];
        int i = l,j = r;
        while(i <= j){
            while (p[i] < flag) i++;p
            while (p[j] > flag) j--;
            if(i <= j){
                int a = p[i];
                p[i] = p[j];
                p[j] = a;
                i++;j--;
            }
        }
        if(l < j) sort(p,l,j);
        if(r > i) sort(p,i,r);
    }
    public static void main(String[] args){
       Scanner sc = new Scanner(System.in);
       int n = sc.nextInt();
       int[] arr = new int[n];
       for(int i = 0;i < n;i++){
           arr[i] = sc.nextInt();
       }
       sort(arr,0, n - 1);
       for(int i = 0; i < n ; i++) System.out.print(arr[i] + " ");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YZzzz...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值