| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 692 人关注过本帖
标题:初级 C++ 学习者来求教,编程中排序题目遇到的问题,求解答
只看楼主 加入收藏
appxsl
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-10-9
结帖率:0
收藏
已结贴  问题点数:10 回复次数:8 
初级 C++ 学习者来求教,编程中排序题目遇到的问题,求解答
题目是用选择法对10个整数进行由小到大排序。

我的编程是:
#include <iostream>
using namespace std;
int main()
{
    void select_sort(int array[], int n);
    int a[10], i;
    cout << "输入原始数组:" << endl;
    for (i = 0; i < 10; i++)
        cin >> a[i];
    cout << endl;
    select_sort(a, 10);
    cout << "排序好的数组:" << endl;
    for (i = 0; i < 10; i++)
        cout << a[i] << " ";
    cout << endl;
    return 0;
}
void select_sort(int array[], int n)
{
    int i, j, t;
    for (i = 0; i < 10; i++)
    {
        for (j = i + 1; j < n;j++)
        if (array[j] < array[i])
        t = array[j]; array[j] = array[i]; array[i] = t;



参考答案给的编程:
#include <iostream>
using namespace std;
int main()
{
    void select_sort(int array[], int n);
    int a[10], i;
    cout << "输入原始数组:" << endl;
    for (i = 0; i < 10; i++)
        cin >> a[i];
    cout << endl;
    select_sort(a, 10);
    cout << "排序好的数组:" << endl;
    for (i = 0; i < 10; i++)
        cout << a[i] << " ";
    cout << endl;
    return 0;
}
void select_sort(int array[], int n)
{
    int i, j,k, t;
    for (i = 0; i < 10; i++)
    {
        k = i;
        for (j = i + 1; j < n;j++)
        if (array[j] < array[i])
            k = j;
        t = array[k]; array[k] = array[i]; array[i] = t;
    }
}



     不同点在于红色标记的地方。我的编程没有设置变量K,但是答案设置了。我个人觉得有没有K都无所谓啊,但是实际运行我的是错误的,答案是正确的。我很想知道这个K起到什么作用?为什么非要弄个K呢?求大神的详细解答啊
搜索更多相关主题的帖子: return include 学习者 
2014-10-09 16:36
xiaoxiongf
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2014-10-9
收藏
得分:3 
我运行了你自己写的程序,是正确的哇
2014-10-09 21:39
appxsl
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-10-9
收藏
得分:0 
回复 2 楼 xiaoxiongf
亲,不正确啊。我用VS2013运行的,输入10个数,运行错误啊!
亲要输入10个数字运行试试
2014-10-09 21:57
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:3 
你看个看过去没错0.0
参考的简化了也是跟你那个一样的..

hl928452957@gmail点com

2014-10-10 07:42
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
你可以试着在你的代码if 下面加一个else试试看
else 
    t = array[i]; array[i] = array[i]; array[i] = t;

hl928452957@gmail点com

2014-10-10 07:43
我心飞扬123
Rank: 1
等 级:新手上路
帖 子:8
专家分:8
注 册:2014-10-8
收藏
得分:3 
if后面的3条语句要加{},否则只会执行if后面的第一条语句。
2014-10-14 16:24
a874695162
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2014-7-21
收藏
得分:3 
你的程序出错的原因: if (array[j] < array[i])这一句后面的那三句要用{}括起来,否则:只有第一句在if判定成立后才执行,其他两句无论成立与否都会执行
你所给出的参考答案也是有问题的:按照你所给代码的逻辑,是将位置最靠后的比a[i]小的那个与之对换,直至i<10,但是请你考虑如果你输入的数字是类似10,1,2,3,4,5,6,7,8,9这样的:1.有两个或两个以上所判定的第i个数小的数在第i位之后 2.这几个数中存在位置在前而本身较小的数 就会出错
将你所给的参考答案修改一下,可以减少交换次数,从而提高效率:
 if (array[j] < array[k])
          k = j;
t = array[k]; array[k] = array[i]; array[i] = t;
提高效率的原因:找到最小的数字再与第i个数字交换,而不是找到比第i个数字小的就执行交换(一个交换过程要执行三个语句,那么效率之比就是1:n,n为if判断成立的次数)

我也是初学者 有意互相请教请加qq874695162

加油,再加油!编程,再编程!
2014-10-14 20:48
a874695162
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2014-7-21
收藏
得分:0 
你的程序出错的原因: if (array[j] < array[i])这一句后面的那三句要用{}括起来,否则:只有第一句在if判定成立后才执行,其他两句无论成立与否都会执行
你所给出的参考答案也是有问题的:按照你所给代码的逻辑,是将位置最靠后的比a[i]小的那个与之对换,直至i<10,但是请你考虑如果你输入的数字是类似10,1,2,3,4,5,6,7,8,9这样的:1.有两个或两个以上所判定的第i个数小的数在第i位之后 2.这几个数中存在位置在前而本身较小的数 就会出错
将你所给的参考答案修改一下,可以减少交换次数,从而提高效率:
 if (array[j] < array[k])
          k = j;
t = array[k]; array[k] = array[i]; array[i] = t;
提高效率的原因:找到最小的数字再与第i个数字交换,而不是找到比第i个数字小的就执行交换(一个交换过程要执行三个语句,那么效率之比就是1:n,n为if判断成立的次数)

我也是初学者 有意互相请教请加qq874695162

加油,再加油!编程,再编程!
2014-10-14 20:48
qwe885167759
Rank: 4
等 级:业余侠客
威 望:5
帖 子:148
专家分:259
注 册:2013-3-12
收藏
得分:0 
同意楼上的

我本楚狂人,凤歌笑孔丘
2014-10-25 23:07
快速回复:初级 C++ 学习者来求教,编程中排序题目遇到的问题,求解答
数据加载中...
 
   



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

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