| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 640 人关注过本帖
标题:一个小问题,一直不明白,希望各位达人帮一下
只看楼主 加入收藏
遥夜闲信步
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-9-2
收藏
 问题点数:0 回复次数:7 
一个小问题,一直不明白,希望各位达人帮一下
初学C不久,在谭老师的书上看到这么一个例题:
用选择法对数组中的10个整数按由小到大排序

#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("%5d",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;
  }
}

这是例题;
但是,我有一个问题,为什么把调用函数改成
void sort(int array[],int n)
{
  int i,j,t;
  for(i=0;i<n-1;i++)
  {
    for(j=i+1;j<n;j++)
        if(array[i]>array[j])
         t=array[i];array[i]=array[j];array[j]=t;
  }
}
就是错误的呢,在原例题中的K的作用是什么呢.
搜索更多相关主题的帖子: include 
2008-09-02 20:29
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
浅见
这个是选择法排序.k的作用是保存每一趟比较中,最小的那个数组元素的下标.
如果有n个数需要排序,则需要进行n-1趟比较,第i趟比较,需要比较n-i-1次.
比如当i=0时,讲array[1],array[2]...轮流和array[0]进行比较,如果比它小,则交换.以后的步骤类似.
2008-09-02 20:58
yk19880525
Rank: 1
来 自:江汉大学
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-5-5
收藏
得分:0 
这个问题貌似不是你那么理解的,你看那个if语句后面的分号在哪里,仿佛你理解错了,所以一改就改错了!
2008-09-02 21:09
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
让他直接调试会更晕的。找张纸画画就明白了

without further ado, let’s get started
2008-09-03 13:01
winderlla
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-3-30
收藏
得分:0 
不一定需要K,另外看看你的if语句,需要加{}
#include<stdio.h>

void sort(int *, int);

void main()
{
    int i;
    int arry[10] = {1,2,3,4,5,6,7,8,9,10};
    printf("\n");
    for (i=0; i<10; i++)
    {
        printf("%d ",arry[i]);
    }
    printf("\n");
    sort(arry,10);
    for (i=0; i<10; i++)
    {
        printf("%d ",arry[i]);
    }
}

void sort(int arry[], int n)
{
    int temp;
    for (int i=0; i<n; i++)
    {
        for (int j=i+1; j<n; j++)
        {
            if (arry[j] > arry[i])
            {
                temp = arry[i];
                arry[i] = arry[j];
                arry[j] = temp;
            }

        }
    }

}
2008-09-03 22:06
遥夜闲信步
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-9-2
收藏
得分:0 
哦,看明白了。自己钻了牛角尖,谢谢各位.
2008-09-04 21:40
pdcboy
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-3-21
收藏
得分:0 
#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("%5d",a[i]);
  printf("\n");
  getch();
}
  void sort(int array[],int n)
{
  int i,j,t;
  for(i=0;i<n-1;i++)
  for(j=i+1;j<n;j++)
         if(array[i]>array[j])
            {
            t=array[i];array[i]=array[j];array[j]=t;
  }
}
 
 改成这样也行啊
2008-09-04 22:25
快速回复:一个小问题,一直不明白,希望各位达人帮一下
数据加载中...
 
   



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

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