标题:快速排序,求指教
只看楼主
预备大佬
Rank: 1
等 级:新手上路
帖 子:33
专家分:4
注 册:2018-11-8
结帖率:81.82%
已结贴  问题点数:12 回复次数:3 
快速排序,求指教
#include<stdio.h>
int a[101], n;
void quicksort(int left,int right)
{
    int i, j, t, temp;
    if (left > right)
    {
        return;
    }
    temp = a[left];
    i = left;
    j = right;
    while (i != j)
    {
        while (a[j] >= temp&&i < j)
        {
            j--;
        }
        while (a[i] <= temp&&i < j)
        {
            i++;
        }
        if (i < j)
        {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    a[left] = a[i];
    a[i] = temp;
    quicksort(left, i - 1);
    quicksort(i + 1, right);
    return;
}
int main()
{
    int i, j;
    int n;
    scanf_s("%d", &n);
    for (i = 1; i <= n; i++)
    {
        scanf_s("%d", &a[i]);
    }
    quicksort(1, n);
    for (i = 1; i <= n; i++)
    {
        printf_s("%d ", a[i]);
    }
    return 0;
}
这个算法里有个地方我不理解
if (left > right)
    {
        return;
    }
这个语句有社么用,把他删了,就打印不出结果。
搜索更多相关主题的帖子: 快速排序 int left temp return 
2018-12-29 20:40
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
得分:2 
可以代个数去掉代码算算看
2018-12-29 21:14
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:10 
当left和right相遇时,a[left]或a[right]相当于空单元,且a[left]左边均比它小,右边均比它大,最后将基准记录移至a[left]中,完成了一次划分,再对a[left]的左子表和右子表进行同样的划分。
把它删了,就没有递归的出口了
#include <iostream>
#include <algorithm>
using namespace std;

int quick_pass(int a[],int left,int right)
{
    int t=a[left];
    while(left<right)
    {
        while(left<right&&a[right]>=t)
            --right;
        if(left<right)
            a[left++]=a[right];
            
        while(left<right&&a[left]<t)
            ++left;
        if(left<right)
            a[right--]=a[left];        
    }
   
    a[left]=t;
    return left;
}

void quick_sort(int a[],int left,int right)
{
    if(left<right)
    {
        int pos=quick_pass(a,left,right);
        quick_sort(a,left,pos-1);
        quick_sort(a,pos+1,right);
    }
}

int main()
{
    int a[]={70,30,40,10,80,20,90,100,75,60,45};
    int length=sizeof(a)/sizeof(int);
   
    quick_sort(a,0,length-1);
    for(int i=0;i<length;++i)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}
2018-12-29 21:17
预备大佬
Rank: 1
等 级:新手上路
帖 子:33
专家分:4
注 册:2018-11-8
得分:0 
回复 3楼 花脸
谢谢
2018-12-30 09:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492391-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.556718 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved