| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 337 人关注过本帖
标题:请教高手 排序问题
只看楼主 加入收藏
刘暮哲
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:75
专家分:83
注 册:2009-9-25
结帖率:69.23%
收藏
已结贴  问题点数:5 回复次数:6 
请教高手 排序问题
#include<stdio.h>
void main()
{
    int i,j,k,min;
    float a[100];
    float m,ave;
    printf("please enter the number of items:\n");
    scanf("%d",&k);
    printf("please enter the items:\n");
    for(i=0;i<k;i++)
        scanf("%f",&a[i]);
    printf("\n");
    for(j=0;j<k;j++)
    {  
       for(i=1;i<k-j;i++)
   
            if(a[i]>a[i+1])
               
                m=a[i+1];
                a[i+1]=a[i];
                a[i]=m;
        

    }
    for(i=0;i<k;i++)
        printf("%f  ",a[i]);
    if(k%2==0)
        ave=(a[k/2]+a[k/2-1])/2;
    else
        ave=a[(k-1)/2];
    printf("the average is: %f",ave);
}
想请教下  这我想用冒泡排序  我觉得没有问题   但是就是不真确  帮我看看怎么改  谢谢!
还有  想请教大侠排序算法的经典例子  谢谢
2009-10-10 16:53
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:3 
#include<stdio.h>
void main()
{
    int i,j,k,min;
    float a[100];
    float m,ave;
    printf("please enter the number of items:\n");
    scanf("%d",&k);
    printf("please enter the items:\n");
    for(i=0;i<k;i++)
        scanf("%f",&a[i]);
    printf("\n");
    for(j=0;j<k-1;j++)            //注意i和j循环条件
    {  
       for(i=0;i<k-j-1;i++)
   
            if(a[i]>a[i+1])
               
                {
                    m=a[i+1];   //别漏了{  }
                a[i+1]=a[i];
                a[i]=m;
                }
        

    }
    for(i=0;i<k;i++)
        printf("%f  ",a[i]);
    if(k%2==0)
        ave=(a[k/2]+a[k/2-1])/2;
    else
        ave=a[(k-1)/2];
    printf("the average is: %f",ave);
}
排序还可以采用比较法:
#include<stdio.h>
void main()
{
    int i,j,k,min;
    float a[100];
    float m,ave;
    printf("please enter the number of items:\n");
    scanf("%d",&k);
    printf("please enter the items:\n");
    for(i=0;i<k;i++)
        scanf("%f",&a[i]);
    printf("\n");
    for(j=0;j<k-1;j++)
    {  
       for(i=j+1;i<k;i++)
   
            if(a[j]>a[i])
               
                {
                    m=a[i];
                a[i]=a[j];
                a[j]=m;
                }
        

    }
    for(i=0;i<k;i++)
        printf("%f  ",a[i]);
    if(k%2==0)
        ave=(a[k/2]+a[k/2-1])/2;
    else
        ave=a[(k-1)/2];
    printf("the average is: %f",ave);
}


[ 本帖最后由 m456m654 于 2009-10-10 17:20 编辑 ]
2009-10-10 17:05
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
除了选择排序就是冒泡排序,还有什么?

我可好玩啦...不信你玩玩^_^
2009-10-10 20:29
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:2 
我无聊写的:
/*冒泡法*/
void bubble(int array[],int num,int flag)
{
    int i,j;
    int temp;
    for(i = 0; i < num-1; i++)/* from 0 to num -2 */
    {
        if(flag)
        {
           for(j = 0; j < num - 1- i;j++)/* from 0 to num - 3 - i and i indicates how many elements have been OK*/
           {
               if(array[j] > array[j+1])
               {
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = array[j];
               }
           }
        }
        else
        {
            for(j = num - 1;j >= i; j--)
            {
                if(array[j] < array[j-1])
                {
                    temp = array[j];
                    array[j] = array[j-1];
                    array[j-1] = temp;
                }
            }
        }
    }

}
/*
   交换法
*/
void change(int array[],int num)
{
    int i,j;
    int temp;
    for(i = 0;i < num -1;i++)
    {
        for(j = i+1;j < num -1;j++)
        {
            if(array[j] < array[i])
            {
                temp = array[j];
                array[j] = array[i];
                array[i] = temp;
            }
        }
    }

}
/*
   插入法
*/
void insert(int array[],int num)
{
    int i,j;
    int temp;
    for( i = 1;i < num-1; i++)
    {
        temp = array[i];
        j = i-1;
        while((j>= 0) && (array[j] >temp))
        {
            array[j+1] = array[j];
                j--;
        }
        array[j+1] = temp;
    }
}

要练习算法就来http:///!!有挑战哦!!
2009-10-10 22:34
Aion
Rank: 2
等 级:论坛游民
帖 子:19
专家分:52
注 册:2009-10-10
收藏
得分:0 
干嘛把flag放循环内呢?放外面不是更好?

Admin

专门做题
2009-10-10 22:46
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
以下是引用Aion在2009-10-10 22:46:12的发言:

干嘛把flag放循环内呢?放外面不是更好?
flag的作用是控制冒泡是向后还是向前,你觉得放在外面应该怎么写?

要练习算法就来http:///!!有挑战哦!!
2009-10-10 22:58
刘暮哲
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:75
专家分:83
注 册:2009-9-25
收藏
得分:0 
谢谢各位了 呵呵

做最好的自己
2009-10-11 11:19
快速回复:请教高手 排序问题
数据加载中...
 
   



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

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