快速排列以及模板

                                 快速排序算法可以分为三个步骤:

      1.选取中心点 q[l],q[(l+r)/2],q[r]
      2.划分区域,根据选取的中心点将数组划分成两部分(左边全小于中心点,右边大于中心点)
      3.递归这两部分
    

代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int []q= new int[n];
        for(int i = 0;i<n;i++){
            q[i] = sc.nextInt();
        }   
        quick_sort(q,0,n-1);//快排
        
        for(int i=0;i<n;i++){
            System.out.print(q[i]+" ");
        }
    }
    public static void quick_sort(int q[],int l,int r){
        if(l>=r) return;  
        int x = q[l],i=l-1,j= r+1;
        while(i<j){
            do i++; while(q[i]<x); //左区间的点严格小于x
            do j--; while(q[j]>x);  //右区间的点严格大于x
            if(i<j){
                int temp = q[i];
                q[i] = q[j];
                q[j] = temp; // 交换两个数
                }
            }
            /*索引j左侧的数字都是小于等于x,包括q[j]。索引j右侧的数字都是大于等于x,不包括q[j]
            故区间分为[l,j]和[j+1,r]*/
            
            quick_sort(q,l,j);//递归快排左区间
            quick_sort(q,j+1,r);//递归快排右区间
     
        }
    
}

核心代码及模板:

  public static void quick_sort(int q[],int l,int r){
        if(l>=r) return;  
        int x = q[l],i=l-1,j= r+1;
        while(i<j){
            do i++; while(q[i]<x); 
            do j--; while(q[j]>x);  
            if(i<j){
                int temp = q[i];
                q[i] = q[j];
                q[j] = temp; 
                }
            }
          
            
            quick_sort(q,l,j);
            quick_sort(q,j+1,r);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值