栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

快速排序详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

快速排序详解

正文之前

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

正文

下面是代码,我来一个个解释

#include
#include
using namespace std;

void swap(int &a,int &b)
{
    int tmp=a;
    a=b;
    b=tmp;
}

int times=0;

下面这段是全文的重点,对于一个数组,要进行分治处理,那么我们需要知道到底在哪儿进行分割,当然,也可以无脑的二分法,但是这样的话对于一些情况就会产生很不好的效率,而且我们这个也是二分,但是没有对称的分配。


如上图所示,我们对于一段数组,先取最后一个数作为我们分割点,然后黑线向前推进,如果发现黑线后的数比分割点小,那么就丢到前面准备的一个位置,也就是那一句swap(a[i],a[j]); 在此过程中++i是必不可少的,这样到了最后,在i之前的就都是分割点小,比分割点大的都在i后面,然后把分割点跟i的下一个位置置换,那么不论前后多少个书,分割点的位置是确定的。剩下的只要分治分割点前后的两段数组罢了!等到最后无法继续分割了,就意味着分治完毕,排序完成!

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

下面看效果吧!!


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<

完整代码奉上:

#include
#include
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
  正文之后

相对来说,快速排序代码比较简单,对于数据结构的要去不高,只要你能理解分治的概念,并且对于数组有着较好的把握,那么应该就很好理解了!

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号