Linux学习C++入门教程案例——排序算法

C++中的一维数组案例——排序算法

一、冒泡排序

1.思路(小到大)

如1,4,2,3,5,8,6,首先取数1,与后面的数比较,若比他小,位置不变,若比他大,往后挪一位;结束取数4与后面的数比较;循环往复。

2.复杂度

假设数组长度为n,计算量为:
(n-1)+(n-2)+···+1=(nx(n-1))/2

3.代码示例
#include <iostream>
using namespace std;

int main()
{
        int array[9]={9,5,1,6,8,4,7,2,3};
        cout<<"排序前的数组:";
        for(int i=0;i<9;i++)
        {
                cout<<array[i]<<" ";
        }
        cout<<endl;
        
        //排序
        for(int i=0;i<9;i++)//打擂台九次
        {
                for(int j=0;j<8-i;j++)//每次打擂台
                {
                        int temp=array[j];
                        if(array[j]>array[j+1])
                        {
                                array[j]=array[j+1];
                                array[j+1]=temp;
                        }
                }
        }
        cout<<"排序后的数组:";
        for(int i=0;i<9;i++)
        {
                cout<<array[i]<<" ";
        }
        cout<<endl;
        return 0;
}
4.代码测试

在这里插入图片描述

5.优缺点

以时间换空间,数据多时,运行速度慢,但消耗内存空间少。

二、桶排序

1.思路

建立多个桶来统计每种数据出现次数,每一个桶对应一种数据,最后再输出。

2.复杂度

取决于桶数n。

3.代码示例
#include <iostream>
using namespace std;

int main()
{
        int statics[10]={0};
        cout<<"随机生成100个0~9的数:"<<endl;
        for(int i=0;i<300;i++)
        {
                int num=rand()%10+0;
                cout<<num<<" ";
                switch (num)
                {
                        case 0:statics[0]++;break;
                        case 1:statics[1]++;break;
                        case 2:statics[2]++;break;
                        case 3:statics[3]++;break;
                        case 4:statics[4]++;break;
                        case 5:statics[5]++;break;
                        case 6:statics[6]++;break;
                        case 7:statics[7]++;break;
                        case 8:statics[8]++;break;
                        case 9:statics[9]++;break;
                        default:cout<<"错误"<<endl;
                }
        }
        cout<<endl;
        for(int i=0;i<10;i++)
        {
                cout<<"数字"<<i<<"出现"<<statics[i]<<"次"<<endl;
        }
        for(int i=0;i<10;i++)
        {
                for(int j=0;j<statics[i];j++)
                        cout<<i<<" ";
        }
        cout<<endl;
        return 0;
}
4.代码测试

在这里插入图片描述

5.优缺点

以空间换时间,运行速度快,但桶多时,占用内存多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux 是一个开源的操作系统,被广泛应用于服务器、嵌入式设备以及个人电脑。如果你对 Linux 操作系统感兴趣并希望入门学习,我建议你按照以下步骤进行: 1. 了解基本概念:在开始学习 Linux 之前,了解一些基本概念是必要的。例如,你需要了解 Linux 的历史、特点、发行版以及 Shell 等基本概念。 2. 安装 Linux:选择一个适合你的需求的 Linux 发行版,并安装在你的计算机上。有一些常见的发行版如 Ubuntu、Fedora、Debian 等,它们提供了友好的安装界面和大量的软件包。 3. 学习基本命令:学习 Linux 的命令行界面是非常重要的。掌握一些常用的命令如 cd、ls、mkdir、rm 等,并了解其基本用法和参数。你可以通过阅读文档、参考书籍或者在互联网上搜索相关教程来学习这些命令。 4. 理解文件系统:熟悉 Linux 的文件系统是很有必要的。学习如何创建、移动以及删除文件和目录,并理解权限管理和链接等概念。 5. 掌握软件管理:学习如何使用包管理器来安装、更新和删除软件。不同的发行版可能使用不同的包管理器,如 apt、yum、dnf 等。了解包管理器的基本命令和用法将帮助你轻松管理你的系统。 6. 认识网络配置:学习如何配置网络是很重要的。了解如何设置 IP、DNS 以及网络接口配置等内容将帮助你正确连接互联网并与其他设备进行通信。 7. 提升技能:一旦你对入门内容有了基本了解,你可以深入学习其他主题,如 Shell 脚本、用户和组管理、远程登录、安全性等等。这将使你能够更好地管理你的 Linux 系统。 总之,学习 Linux 并不是一件容易的事情,但是掌握它会给你带来很多好处。通过不断的实践和学习,你将能够熟练地使用 Linux,并在工作和个人生活中受益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有几何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值