| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2848 人关注过本帖
标题:选择法的升序排列
只看楼主 加入收藏
wewoor
Rank: 1
等 级:新手上路
帖 子:25
专家分:5
注 册:2010-10-4
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:7 
选择法的升序排列


#include <stdio.h>
void main()
{
     void sort(int array[],int n)
         int a[10],i;
     printf("enter the array:\n");
     for (i=0;i<10;i++)
         scanf("%d",&a[i]);
     sort(a,10);
     printf("The sorted array:\n");
     for(i=0;i<10;i++)
         printf("%d",a[i]);
     printf("\n");
}
void sort (int array[],int n)
{
    int i,j,k,t;
    for (i=0;i<n-1;i++)                             //这部分的循环不知道怎么理解,有些不理解,望大家给我讲解一下。。
    {
        k=i;
        for (j=i+1;j<n;j++)
            if (array[j]<array[k])
                k=j;
            t=array[k];array[k]=array[i];array[i]=t;
    }
}

搜索更多相关主题的帖子: 排列 选择 
2010-12-01 21:12
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:2 
for (i=0;i<n-1;i++)                             //这部分的循环不知道怎么理解,有些不理解,望大家给我讲解一下。。
    {
        k=i;
        for (j=i+1;j<n;j++)
            if (array[j]<array[k])    //选择无序中最小的数的下标。
                k=j;
            t=array[k];array[k]=array[i];array[i]=t;   //交换
    }

编程的道路上何其孤独!
2010-12-01 21:25
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:2 
for (i=0;i<n-1;i++)          //控制比较的次数,10个元素就比较九次,(和冒泡算法类似)
    {
        k=i;                 //第i次比较的时候将array[i]看做array[i]到array[9]中的最小数               
        for (j=i+1;j<n;j++)  //找出array[i]到array[9]中真正的最小数
            if (array[j]<array[k])  //
                k=j;         
            t=array[k];array[k]=array[i];array[i]=t; //将真正的最小数赋给array[i],接着进行下一次比较
    }
}

我也是菜鸟,表达一下自己的见解,大神们不要喷我!(*^__^*) 嘻嘻……
2010-12-01 21:51
甘俊霖
Rank: 2
等 级:论坛游民
帖 子:20
专家分:41
注 册:2010-11-21
收藏
得分:2 
#include<stdio.h>
main()
{
    int a[100],n,i,j,k;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for (i=0;i<n-1;i++)                             //这部分的循环不知道怎么理解,有些不理解,望大家给我讲解一下。。
    {
        for (j=i+1;j<n;j++)
            if (a[j]<a[i])
            {
                k=a[i];
                a[i]=a[j];
                a[j]=k;
            }               
    }
    for(i=0;i<n;i++)
        printf("%d",a[i]);
}
2010-12-01 22:15
甘俊霖
Rank: 2
等 级:论坛游民
帖 子:20
专家分:41
注 册:2010-11-21
收藏
得分:0 
这就是实现那个功能的程序,把一堆数按大小输出,那个就是交换把小的依次a[i](i=0;i<n;i++),但我对你那个k=i,不太懂,好像没必要。
2010-12-01 22:19
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:0 
以下是引用甘俊霖在2010-12-1 22:19:13的发言:

这就是实现那个功能的程序,把一堆数按大小输出,那个就是交换把小的依次a(i=0;ivoid sort (int array[],int n)
{
    int i,j,k,t;
    for (i=0;i<n-1;i++)                             //这部分的循环不知道怎么理解,有些不理解,望大家给我讲解一下。。
    {
       /* k=i;*/
        for (j=i+1;j<n;j++)
            if (array[j]<array[i])
               /* k=j;*/
            {t=array[j];array[j]=array[i];array[i]=t;}   
     }
}
k可以不要的

我觉得楼主可以看看冒泡算法,我觉得这些类似的算法只要你理解了一个,其他的就好理解了

[ 本帖最后由 venus85 于 2010-12-1 23:36 编辑 ]
2010-12-01 23:33
xufan123
Rank: 5Rank: 5
等 级:职业侠客
帖 子:226
专家分:318
注 册:2010-11-15
收藏
得分:2 
i 和j j的最小值比i大一
i=0; j=[1~n)
a[0] a[1~n-1] 比较   若大 a[0]往后排 a[0]变为最小的数
a[1] a[2~n-2] 比较   若大 a[1]往后排 a[1]变为除a[0]最小的数  
a[2] a[3~n-3] 比较   若大 a[2]往后排 a[2]变为除a[0]和a[1]最小的数  

 相当于一个数与后面的一群数比较 再换数
2010-12-02 00:00
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:0 
刚才上网查了查,发现了个问题,这里所谓的选择排序是不是体现在K这个地方,我把K去掉了好像就变成了冒泡排序了,不知道我理解的对不对,恳请大神指点!!!
2010-12-02 00:09
快速回复:选择法的升序排列
数据加载中...
 
   



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

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