正文之前
这是最后的存货了。刚才看了下主页,不知不觉就写了两百篇了~真是神奇!缘,妙不可言~

正文
下面是代码,我来一个个解释
#include<iostream>
#include<stdio.h>
using namespace std;
void swap(int &a,int &b)
{
int tmp=a;
a=b;
b=tmp;
}
int times=0;
👇下面这段是全文的重点,对于一个数组,要进行分治处理,那么我们需要知道到底在哪儿进行分割,当然,也可以无脑的二分法,但是这样的话对于一些情况就会产生很不好的效率,而且我们这个也是二分,但是没有对称的分配。

int Partition(int a[],int p,int r)
{
int ZhuYuan=a[r];
int i=p-1;
for (int j=p; j < r; ++j)
{
if(a[j]<=ZhuYuan)
{
++i;
++times;
swap(a[i],a[j]);
}
}
swap(a[i+1],a[r]);
return i+1;
}
void Quick_Sort(int a[],int p,int r)
{
if (p<r)
{
cout<<p<<" -- "<<r<<endl;
int q=Partition(a,p,r);
Quick_Sort(a,p,q-1);
++times;
Quick_Sort(a,q+1,r);
}
}
下面看效果吧!!
int main()
{
int a[101];
for (int i = 0; i<100; ++i)
{
a[i]=rand()%1000;
}
Quick_Sort(a,0,100);
for(int s=1;s<100;++s)
{
if(s%8==0)
cout<<endl;
cout<<a[s]<<" --> ";
}
cout<<endl;
cout<<times<<endl;
return 0;
}

完整代码奉上:
#include<iostream>
#include<stdio.h>
using namespace std;
void swap(int &a,int &b)
{
int tmp=a;
a=b;
b=tmp;
}
int times=0;
int Partition(int a[],int p,int r)
{
int ZhuYuan=a[r];
int i=p-1;
for (int j=p; j < r; ++j)
{
if(a[j]<=ZhuYuan)
{
++i;
++times;
swap(a[i],a[j]);
}
}
swap(a[i+1],a[r]);
return i+1;
}
void Quick_Sort(int a[],int p,int r)
{
if (p<r)
{
cout<<p<<" -- "<<r<<endl;
int q=Partition(a,p,r);
Quick_Sort(a,p,q-1);
++times;
Quick_Sort(a,q+1,r);
}
}
int main()
{
int a[101];
for (int i = 0; i<100; ++i)
{
a[i]=rand()%1000;
}
Quick_Sort(a,0,100);
for(int s=1;s<100;++s)
{
if(s%8==0)
cout<<endl;
cout<<a[s]<<" --> ";
}
cout<<endl;
cout<<times<<endl;
return 0;
}
正文之后
相对来说,快速排序🔜代码比较简单,对于数据结构的要去不高,只要你能理解分治的概念,并且对于数组有着较好的把握,那么应该就很好理解了!