学习目标:
我会持续更新我独特的算法思路,希望能给大家带来不一样的思维拓展!
如果大家感觉有帮助的话,欢迎点赞关注支持哦!
你们的鼓励是我坚持下去的动力!
!!!
学习内容:
快排
牛客网链接
学习时间:
2022.4.14
学习产出:
快排1.0 2.0
实现代码
快排3.0
using System;
class test{
static void Main(){
int count=Convert.ToInt32(Console.ReadLine());
string[] input=Console.ReadLine().Split(' ');
int[] arr= new int[count];
for(int i=0;i<count;i++){
arr[i]=Convert.ToInt32(input[i]);
}
Process(arr,0,count-1);
for(int i=0;i<count;i++){
Console.Write(arr[i]+" ");
}
}
static void Process(int[] arr,int L,int R){
if(L<R){
Random random = new Random();
Swap(arr,random.Next(L,R),R);
int[] p=Partation(arr, L, R, arr[R]);
Process(arr,L, p[0]);
Process(arr,p[1],R);
}
}
static int[] Partation(int[] arr,int L,int R,int p){
int less=L-1;
int more=R;
int index=L;
while(index<more){
if(arr[index]<p){
Swap(arr, ++less, index++);
}else if(arr[index]>p){
Swap(arr, --more, index);
}else{
index++;
}
}
Swap(arr,more, R); //调到最后去
return new int[]{less,more+1};
}
static void Swap(int[] arr,int x,int y){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}