标题:初学C++,在数组排序上有些不懂,请大家帮帮我。
只看楼主
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
结帖率:100%
已结贴  问题点数:20 回复次数:3 
初学C++,在数组排序上有些不懂,请大家帮帮我。
//我想把数组8 4 2 1 23 344 12排序,可是
//排序结果为1 2 4 8 12 23 127 数组里没有127啊?
#include<iostream>
using namespace std;
int main()
{   int temp;

    int num[]= {8,4,2,1,23,344,12};
    int length=sizeof(num)/sizeof(int);//计算数组长度

    for(int i=0; i<length-1; i++)
    {   for(int j=0; j<length-i; j++)
        {

            if(num[j]>num[j+1])
            {   temp=num[j];
                num[j]=num[j+1];
                num[j+1]=temp;
                }}}
            for( int i=0;i<length;i++)
            {
            cout << num[i]<<endl ;
            
            }}
搜索更多相关主题的帖子: 排序 C++ 数组 int num 
2019-12-03 11:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
length-i 改为 length-1-i

另外,代码要排版
程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    int num[] = { 8, 4, 2, 1, 23, 344, 12 };
    const size_t length = sizeof(num)/sizeof(*num);

    for( size_t i=0; i<length-1; ++i )
    {
        for( size_t j=0; j<length-1-i; ++j )
        {
            if( num[j] > num[j+1] )
            {
                int temp = num[j];
                num[j] = num[j+1];
                num[j+1]=temp;
            }
        }
    }

    for( size_t i=0; i<length; ++i )
    {
        cout << num[i] << '\n';
    }
}

2019-12-03 11:28
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
回复 2楼 rjsp你是第一个回复我的,不回复是对大大的不尊重
首先是谢谢大大帮我解答。你的建议很奏效,看懂了很多。
而且你发来的一贴代码让我学到了很多,刚开始让我深度怀疑我学的是假的C++,我看不懂啊!像*num  size-t。
然后我就对size_t百度了一下,原来它是一个整形啊,除了int short long  longlong char  bool还有一个整形啊,你让我学到了,在c++中,适用多个平台,可移植性强,*num我没有看懂。num大小是4  int大小也是4。28除4正好是7个长度,*num是什么意思?我真的不懂。
再次你说了排版问题,大大第一眼的感觉肯定是眼痛加头疼
额。。其实我不会。我学习下你的排版
我总结了一下

欢迎再次指导

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2019-12-03 14:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 3楼 叶纤
关于size_t,C/C++ 规定 sizeof、strlen 等等的类型是 size_t,那又何必标新立异的写成 int 呢

关于 *num,*是解引用符,算了,你就认为 *num 等同于 num[0] 吧。
之所以将 sizeof(num)/sizeof(int) 改为 sizeof(num)/sizeof(*num),是因为你的这个sizeof(int)和int num[]冗余,可以不依赖就不应该依赖。
举个例子,如果你将 int num[] 改为 double num[] 后,sizeof(num)/sizeof(int) 忘了改的话就会有bug。

如果用C++来做你这题的话,应该是这个样子:
程序代码:
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;

int main( void )
{
    int num[] = { 8, 4, 2, 1, 23, 344, 12 };

    sort( begin(num), end(num) );
    copy( begin(num), end(num), std::ostream_iterator<decltype(*num)>(cout,"\n") );
}

2019-12-03 15:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498184-1-1.html




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

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