P1177 【模板】快速排序 Java

在这里插入图片描述

代码介绍,我使用了两种方式来完成,其一是blibli上的一个视频里面的方式

https://www.bilibili.com/video/av62621532?from=search&seid=10748342993610606032

第二种方式是使用别人的一种方法,他说是二分法,我觉得递归也用到了,相比于第一种方法其实是差不多的,但是只用第二种的方法可以AC,那就还是看看第二种吧,洛谷博客真的难用!!!还是优快云大法好!!!

package 排序;

import java.util.Arrays;
import java.util.Scanner;
//这里是快速排序算法
public class P1177 {
    public static void main(String[] agrs){
        Scanner sc = new Scanner(System.in);
        int w = sc.nextInt();
        int[] ppa = new int[w];
        for(int i=0;i<=ppa.length-1;i++){
            int z = sc.nextInt();
            ppa[i]=z;
        }
        //QuitSort(ppa,0,ppa.length-1);
        QuitSort1(ppa,0,ppa.length-1);
        for(int i=0;i<=ppa.length-1;i++){
            System.out.print(ppa[i]+" ");
        }
    }
    //会出现栈溢出的情况,所以这里使用其他的方法
    /*
    public static void QuitSort(int[] array,int Left,int Right){
        if(Left>Right){
            return;
        }
        int l = Left;
        int r = Right;
        int ppp = array[Left];
        while(l<r){
            while(l<r&&array[r]>=ppp){
                r--;
            }
            if(l<r){
                array[l]=array[r];
            }
            while(l<r&&array[l]<=ppp){
                l++;
            }
            if(l<r){
                array[r]=array[l];
            }
            if(l>=r){
                array[l]=ppp;
            }
        }
        QuitSort(array,Left,l-1);
        QuitSort(array,l+1,Right);
    }
    */
    //使用二分法的思想
    public static void QuitSort1(int[] array,int Left,int Right){
       int mid = array[(Left+Right)/2];
       int i = Left;
       int j = Right;
       do{
           while(array[i]<mid) i++;
           while(array[j]>mid) j--;
           if(i<=j){
               int temp = array[i];
               array[i] = array[j];
               array[j] = temp;
               i++;
               j--;
           }
       }while(i<=j);
       if(Left<j) QuitSort1(array,Left,j);
       if(i<Right) QuitSort1(array,i,Right);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值