| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 692 人关注过本帖
标题:老师都不会的数组问题!!各位赶紧来支招啊!
只看楼主 加入收藏
跳跳鱼
Rank: 2
等 级:论坛游民
帖 子:74
专家分:60
注 册:2011-5-4
结帖率:93.75%
收藏
已结贴  问题点数:20 回复次数:11 
老师都不会的数组问题!!各位赶紧来支招啊!
呵呵!激动啊!老师中被俺难住了!话说书上有这样一个题:用选择法对数组中10个整数由小到大排序。下面是程序代码
#include <iostream>
using namespace std;
int main()
{
void select_sort(int a[],int n);
int a[10],i;
cout<<"enter the original array:"<<endl;
for(i=0;i<10;i++)
cin>>a[i];
cout<<endl;
select_sort(a,10);
cout<<"the sorted srray:"<<endl;
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
void select_sort(int a[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k])k=j;
t=a[k];a[k]=a[i];a[i]=t;
}
}
下面正式开说,注意上面代码的红色字体。个人感觉这个K很鸡肋,明明可以直接比较两个数,为什么还要加个K呢?所以我对形参函数做了一下改变;
void select_sort(int a[],int n)
{int i,j,k;
for(i=0;i<10;i++)
for(j=i+1;j<n;j++)
{if(a[i]>a[j])
t=a[i];a[i]=a[j];a[j]=t;
}
}
问题是,试验了一下,编译什么的都没有错,但一到执行就执行不了了,特别起怪。老师也说不清楚那错了。
为什么那个K不能去掉呢?K的作用是干嘛的呢?求解。。。。。。。。。。
搜索更多相关主题的帖子: return 
2011-06-02 13:08
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:0 
VC6.0,好像没问题哦
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-06-02 13:22
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
哦,看错了,没问题的。。


[ 本帖最后由 hoho568 于 2011-6-2 14:21 编辑 ]
2011-06-02 14:19
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
void sort_asc(int * ar, int size) {        // 升序
    int i, j, k;
    for(i = 0; i < size - 1; i++) {
        k = i;
        for(j = i + 1; j < size; j++) {
            if(ar[j] < ar[k]) {
                k = j;
            }
        }
        if(k != i) {
            swap(ar + k, ar + i);
        }
    }
}

void sort_desc(int * ar, int size) {        // 降序
    int i, j, k;
    for(i = 0; i < size - 1; i++) {
        k = i;
        for(j = i + 1; j < size; j++) {
            if(ar[j] > ar[k]) {
                k = j;
            }
        }
        if(k != i) {
            swap(ar + k, ar + i);
        }
    }
}

void swap(int * p1, int * p2) {
    *p1 ^= *p2;
    *p2 ^= *p1;
    *p1 ^= *p2;
}
我对你的老师很无语。



[ 本帖最后由 lz1091914999 于 2011-6-2 16:29 编辑 ]

My life is brilliant
2011-06-02 16:26
跳跳鱼
Rank: 2
等 级:论坛游民
帖 子:74
专家分:60
注 册:2011-5-4
收藏
得分:0 
同志们!同志们!方向错啦啊!我问的是为啥要有个K呢?K...
明明不加K就可以直接比较的
2011-06-02 22:18
跳跳鱼
Rank: 2
等 级:论坛游民
帖 子:74
专家分:60
注 册:2011-5-4
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
会出现这种情况啊!
2011-06-02 22:29
跳跳鱼
Rank: 2
等 级:论坛游民
帖 子:74
专家分:60
注 册:2011-5-4
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
会出现这种情况啊!
2011-06-02 22:31
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:20 
代码1:
程序代码:
void select_sort(int a[],int n)
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(a[j]<a[k])
                k=j;
        t=a[k];
        a[k]=a[i];
        a[i]=t;
    }
}
代码2:
程序代码:
void select_sort(int a[],int n)
{
    int i,j,t;
    for(i=0;i<9;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
}
这两段代码都是排序的 但是所用的方法是不一样的  注意看自己题目的要求是要用选择法进行排序。
代码1是选择法
代码2是简单的比较交换(不是冒泡,插入, 选择,快排,希尔,堆排,基数)

代码1中之所以要k是因为选择排序要定位到某个数据(最大或最下)的下标(当然是在没有排序好序的那些当中)

2011-06-03 09:24
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:0 
void select_sort(int a[],int n)
{int i,j,k;
for(i=0;i<10;i++)
for(j=i+1;j<n;j++)
{if(a[i]>a[j])
t=a[i];a[i]=a[j];a[j]=t;   这里改的也不对
}
}

截图的情景多半是你数组越界造成的
2011-06-03 09:28
跳跳鱼
Rank: 2
等 级:论坛游民
帖 子:74
专家分:60
注 册:2011-5-4
收藏
得分:0 
谢啦谢啦!受教啦!这个。。。。。让我发现我们老师是多么菜菜
2011-06-03 12:22
快速回复:老师都不会的数组问题!!各位赶紧来支招啊!
数据加载中...
 
   



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

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