标题:快速排序代码,执行后没结果,那个环节出了问题求大佬们指教 感谢
只看楼主
宁缺T
Rank: 1
等 级:新手上路
帖 子:21
专家分:8
注 册:2019-9-12
结帖率:87.5%
已结贴  问题点数:10 回复次数:5 
快速排序代码,执行后没结果,那个环节出了问题求大佬们指教 感谢
#include<stdio.h>
void swap(int *d,int k,int m)
{
    int temp;
    temp=*(d+k);
    *(d+m)=*(d+k);
    *(d+m)=temp;
}
int sort(int *b,int lows,int highs)
{
    //int low,high;
    int middle=b[0];
    if(lows<highs)
    {
        while(lows<highs&&b[highs]>=middle)
            highs--;
        swap(b,highs,lows);
        while(lows<highs&&b[lows]<=middle)
            lows++;
        swap(b,lows,highs);
    }
    return lows;
}
void Quicksort(int a[],int low,int high)
{
    int mid;
    mid=sort(a,low,high);
    Quicksort(a,1,mid-1);
    Quicksort (a,mid+1,9);
}

int main()
{

    int i;
    int a[10]={50,10,90,30,70,40,80,60,20,100};
    Quicksort(a,1,9);


    for(i=0;i<10;i++)
        printf("%2d",a[i]);
    printf("victory");
    return 0;
}
搜索更多相关主题的帖子: temp int mid middle 快速排序 
2019-09-13 09:56
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:3 
Quicksort()函数无限循环了,没有停止条件
2019-09-13 12:06
沈和
Rank: 2
等 级:论坛游民
威 望:5
帖 子:22
专家分:81
注 册:2019-8-26
得分:3 
我以前写的快速排序的算法,给题主贴一下
partition() 函数,相当于题主的sort()函数。
程序代码:
int partition(int A[], int low, int high)
{
    int stored = A[high];
    int i = low - 1;
    for (int j = low; j < high; ++j)
    {
        if (A[j] <= stored)
        {
            i++;
            swap(A, i, j);
        }
    }
    swap(A, i+1, high);
    return i + 1;
}

void quick_sort(int A[], int low, int high)
{
    if (low < high)
    {
        int mid = partition(A, low, high);
        quick_sort(A, low, mid - 1);
        quick_sort(A, mid + 1, high);
    }
}

void swap(int a[], int m, int n)
{
    if (m != n) 
    {
        int tmp = a[m];
        a[m] = a[n];
        a[n] = tmp;
    }
}

2019-09-13 14:13
沈和
Rank: 2
等 级:论坛游民
威 望:5
帖 子:22
专家分:81
注 册:2019-8-26
得分:0 
回复 3楼 沈和
在main函数调用的时候,也有一些差别
quick_sort(A, 0, LENGTH - 1); 这是我的调用方式
2019-09-13 14:22
宁缺T
Rank: 1
等 级:新手上路
帖 子:21
专家分:8
注 册:2019-9-12
得分:0 
大佬们,中秋快乐。我想我知道哪里不对了,谢谢

Stay hungry,Stay foolish.
2019-09-13 16:59
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:4 
首先swap函数错,应修改如下:
void swap(int *d,int k,int m)
{
    int temp;
    temp=*(d+k);
    *(d+k)=*(d+m);
    *(d+m)=temp;
}
其次sort函数中 int middle=b[0];应该是 int middle=b[lows];
再次Quicksort递归应该是Quicksort(a,low,mid-1)和Quicksort(a,mid,high)
再再次main函数中的Quicksort调用数组应该从0起,不是1,即Quicksort(a,0,9)
最后sort函数有算法错误,另外还要考虑数据相同或已经有序时会栈溢出的处理。
目前你的代码在调试中出现的是栈溢出错误。


能编个毛线衣吗?
2019-09-14 02:35



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




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

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