代码介绍,我使用了两种方式来完成,其一是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);
}
}