| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 756 人关注过本帖
标题:大佬们好,这个程序编写输出应该是-985 -93 -2 0 1 4才对 ,为什么是- ...
只看楼主 加入收藏
风流泰
Rank: 1
等 级:新手上路
帖 子:78
专家分:0
注 册:2018-9-29
结帖率:87.88%
收藏
已结贴  问题点数:20 回复次数:3 
大佬们好,这个程序编写输出应该是-985 -93 -2 0 1 4才对 ,为什么是-985 -93 -93 -93 -93 -2呢? 那个环节出了问题
#include<stdio.h>

int FindPos(int * a,int low,int high);
void QuickSort(int * a,int low,int high);

int main(void)
{    int i;
    int a[6]={-2, 1, 0, -985, 4, -93};
    QuickSort(a,0,5);
//第二个参数表示第一个元素下标,第三个参数表示最后一个元素的下标
    for(i=0;i<6;i++)
    {
        printf("%d",a[i]);
    }
    printf("\n");
    return 0;
}

void QuickSort(int * a,int low,int high)
{
    int pos;
    if(low<high)
    {
        pos=FindPos(a,low,high);//找到pos的中间位置
        QuickSort(a,low,pos-1);//pos的左边
        QuickSort(a,pos+1,high); //pos的右边
    }
}


int FindPos(int * a,int low,int high)
{
    int val=a[low];
    while(low<high)
    {
        while(low<high&&a[high]>=val)
        {
            high--;
        }
        a[low]=a[high];
        while(low<high&&a[low]<=val)
        {
            low++;
        }
        a[high]==a[low];
    } //终止while循环之后low和high是相等的
    a[low]=val;
    return high;//high可以改为low 不可改成val a[low] a[high]
}
搜索更多相关主题的帖子: 程序编写 输出 int void while 
2019-02-15 20:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
编译时有警告:“a[high]==a[low]”,warning C4553: '==' : operator has no effect; did you intend '='?
2019-02-18 09:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
1、你的递归没有退出条件
2、一般来讲 排序都要用到交换这个动作,你的代码里明显没有

我在网上找到的一段 实测可以通过的代码  你看一下

程序代码:
#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]; //temp中存的就是基准数 
    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);//继续处理右边的 ,这里是一个递归的过程 
} 

int main() 
{ 
    int i; 
    //读入数据 
    scanf("%d",&n); 
    for(i=1;i<=n;i++)  scanf("%d",&a[i]); 
    quicksort(1,n); //快速排序调用 
    //输出排序后的结果 
    for(i=1;i<=n;i++) printf("%d ",a[i]); 
    getchar();
    return 0; 
} 

DO IT YOURSELF !
2019-02-18 09:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
完全看不懂 FindPos 是什么逻辑,但肯定是错了
2019-02-18 09:23
快速回复:大佬们好,这个程序编写输出应该是-985 -93 -2 0 1 4才对 ,为什 ...
数据加载中...
 
   



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

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