| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 351 人关注过本帖
标题:一个数组排序的问题。
取消只看楼主 加入收藏
soler_z
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:130
注 册:2009-7-17
结帖率:100%
收藏
 问题点数:0 回复次数:1 
一个数组排序的问题。
两两之间比较,把最大的排到最左边。从大往小排列。
下面数组我已经给初始化了,免得自己输入。。。
但是输出结果有问题。不知道错在哪,大家帮忙修改修改。谢谢了。
#include <stdio.h>
#define ARR_SIZE 10
main()
{
    int n,i,j,t,max;
    int num[ARR_SIZE]={1,3,2,5,4,6,7,5,8};
    printf("pls enter a number n:\n");
    scanf("%d",&n);
    for(i=0;i<n-1;i++)/*要选择的次数:0~n-2共n-1次*/
    {
                  
        max=i;/*假设当前下标为i的数最大,比较后再调整*/
        for(j=i+1;j<n;j++)/*循环找出最大的数的下标是哪个*/
        {
           if(num[j]>num[max])
           {  
               max=j;/*如果后面的数比前面的大,则记下它的下标*/
           }
        }
        t=num[i]; /*如果min在循环中改变了,就需要交换数据,互换num[i]num[j]位置*/
        num[i]=num[j];
        num[j]=t;
                      /*应该改成num[i]num[max之间的交换]*/
  
    }
    for(i=0;i<n;i++)
        printf("%d  ",num[i]);
    getch();
}

[[it] 本帖最后由 soler_z 于 2009-7-22 17:36 编辑 [/it]]
搜索更多相关主题的帖子: 数组 排序 
2009-07-22 16:12
soler_z
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:130
注 册:2009-7-17
收藏
得分:0 
回复 2楼 NoSoul
你说的这种方法我知道,,,
我只是想用另外一种方法来试一下,
就是先假定一个下标为i的数最大,max=i
然后num[max]跟后面的数比较,,然后把最大值对应的下标返还给max,
然后再拿最大的这个num[max]跟后面的比较,形成一个循环。。。

哦,找到原因了,,,原来如此,,在最后交换的时候出错了,交换的不是我想要交换的值。

        t=num[i]; /*如果min在循环中改变了,就需要交换数据,互换num[i]num[j]位置*/
        num[i]=num[j];
        num[j]=t;

应该是num[i]和num[max]之间相互交换。。、
2009-07-22 17:31
快速回复:一个数组排序的问题。
数据加载中...
 
   



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

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