标题:排序问题,找错
只看楼主
lemon6226
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-1-9
 问题点数:0 回复次数:6 
排序问题,找错
下面是我写的排序程序,选择和冒泡,但是程序运行出来的结果不是预期的,哪错了??
#include<stdio.h>
#define n 10

void  xuanze(int a[])
{ int i,j,p,q;
  for(i=0;i<n;i++)
   {
    p=a[i];q=i;
    for(j=i+1;j<=n;j++)
     {
      if(a[j]<p)
        {p=a[j];q=j;}
      a[q]=a[i];
      a[i]=p;
     }
   }
  printf("\nthe result of xuanze is:");
   for(i=0;i<n;i++)
    printf("%d ",a[i]);
}

void  maopao(int a[])
{
  int i,j,t;
  for(i=n-1;i>=0;i--)
    for(j=0;j<=i;j++)
     if(a[j]>a[j+1])
      {t=a[j];
       a[j]=a[j+1];
       a[j+1]=t;
      }
  printf("\nthe result of maopao is:");
  for(i=0;i<n;i++)
   printf("%d ",a[i]);
}
void main()
{ int i;
  int a[10];
  printf("\nPlease input 10 numbers:\n ");
  for(i=0;i<n;i++)
   scanf("%d",&a[i]);
  xuanze(a);
  maopao(a);
  getch();
}
搜索更多相关主题的帖子: int void quot xuanze result 
2008-01-09 18:47
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
这样:
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define N 10

void xuanze(int a[])
{
        int ix, i;
        for (ix = 0; ix != N; ++ix)
        {
                for (i = ix + 1; i != N; ++i)
                {
                        if (a[i] > a[ix])
                        {
                                int temp = a[ix];
                                a[ix] = a[i];
                                a[i] = temp;
                        }
                }
        }
        for (ix = 0; ix != N; ++ix)
                printf("%d ", a[ix]);
        putchar('\n');
}

void maopao(int a[])
{ 
        int ix;
        for (ix = 0; ix != N-1; ++ix)
        {
                if (a[ix+1] > a[ix])
                {
                        int temp = a[ix];
                        a[ix] = a[ix+1];
                        a[ix+1] = temp;
                }
        }
        for (ix = 0; ix != N; ++ix)
                printf("%d ", a[ix]);
        putchar('\n');
}

int main()
{
        int i, a[10];
        printf("Please input 10 numbers:\n");
        for(i=0; i<N; i++)
                scanf("%d", &a[i]);
        xuanze(a);
        maopao(a);
        system("pause");
        return 0;
}


[[italic] 本帖最后由 随心 于 2008-1-9 19:46 编辑 [/italic]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-01-09 19:38
lemon6226
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-1-9
得分:0 
谢谢,不过,我还是不懂我写的程序是哪错了呢??????
2008-01-09 19:54
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
你的冒泡是对的,问题出在你的选择上。
你的数组让选择给破坏了
收到的鲜花
  • lemon62262008-01-09 20:30 送鲜花  2朵  

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-01-09 20:00
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
看看你的xuanze函数里的if语句,这句话本来的作用是:如果后面的元素比前面的值小,则交换(按你的意思)。
你可以试着改一下。

[[italic] 本帖最后由 随心 于 2008-1-9 20:06 编辑 [/italic]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-01-09 20:04
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
回复 1# 的帖子
void  xuanze(int a[])
{ int i,j,p,q;
  for(i=0;i<n;i++)
   {
    p=a[i];q=i;
    for(j=i+1;j<=n;j++)    // 下标会溢出,引入随机数!所以出错
     {
      if(a[j]<p)
        {p=a[j];q=j;}
      a[q]=a[i];                  // 把交换放在循环内,已经不是排序了,把这两条语句放到外层循环即可
      a[i]=p;
     }
   }
  printf("\nthe result of xuanze is:");
   for(i=0;i<n;i++)
    printf("%d ",a[i]);
}

我是金子,我要闪光的
2008-01-09 20:05
lemon6226
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-1-9
得分:0 
呵呵,终于改出来了,谢谢你们了
2008-01-09 20:22



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




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

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