• 2022_09_12__排序总结+C++入门


    排序分为两种,分别是内排序和外排序

    内部排序:数据元素全部放到内存中的排序。

    外部排序:数据元素太多不能同时放在内存中,根据排序的过程不能在内外存之间移动数据的排序。

    外存就是硬盘的意思:

    我们对外部排序进行解释:

    例如,假如我们有2g的数据,我们只有1g的内存,那我们要要进行存储数据的话,我们的内存不能够承载这2g的数据,所以我们就要引入外排序。

    对于这些常见的排序算法,也只有归并排序既能够内排序,又能够外排序。

     因为我们要访问硬盘数据时,是不能够随机访问数据的,而上面的排序要么就是要随机访问,要么就是要进行交换,都不支持外部排序。

    我们如何用归并排序进行外部排序呢?

    我们画图来进行解释:

     我们首先让1g内存先处理2g数据的前一半数据,把前一段数据处理成为有序的

    再用1g内存处理2g数据的后一半数据,把后一段数据处理成为有序的。

     我们再把这两个数据分开,我们可以通过双指针的方法来操作:

     我们判断begin1和begin2下标对应的数据的大小,把小的数据逐渐放回到2g的数据中去,当begin1和begin2其中一个走向end时

    我们再把剩下的一个的所有数据再拷贝到2g的数据中,进而实现用1g的内存排序2g的数据。

    c++入门

    第一串代码:

    打印hello world

    1. #include<iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. cout << "hello world" << endl;
    6. return 0;
    7. }

    我们也可以这样写:

    1. #include<iostream>
    2. int main()
    3. {
    4. std::cout << "hello world"<<std::endl;
    5. return 0;
    6. }

    我们进行编译:

    c++关于c语言命名冲突的处理方式:

    我们先写一串代码进行分析:

    1. #include
    2. int rand = 0;
    3. int main()
    4. {
    5. printf("%d\n", rand);
    6. }

    这串代码打印的结果是什么?

    答:很简单,因为我们的rand是全局变量,全局变量的作用域是全局的,所以我们的打印函数是能够打印出rand对应的值的。

     

    但是假如我们再加入一个头文件呢?

    1. #include
    2. #include
    3. int rand = 0;
    4. int main()
    5. {
    6. printf("%d\n", rand);
    7. }

    我们再进行编译:

     我们思考:代码报错的原因是什么?

    答:原因是出在头文件#include的,我们在该头文件中可以找到rand

     rand在该头文件中是一个函数,该函数的作用是产生随机数。

    所以:这里就产生分歧了,我们要打印的是全局变量rand还是#include中的rand函数?

    编译器无法区分,所以就报错了。

    我们如何解决这个问题:

    答:我们可以采取封装的方式:

    我们可以使用命名空间来进行隔离:

    1. #include
    2. #include
    3. namespace bit
    4. {
    5. int rand = 0;
    6. }
    7. int main()
    8. {
    9. printf("%d\n", rand);
    10. }

    这里可以形象化描述为这样:命名空间bit是一个围墙,rand是一个苹果,当我们不使用命名空间bit进行封装时,我们是可以找到苹果的,但是假如我们使用命名空间bit时,就表示我们把围墙后放置了一个苹果,我们不越过围墙的话,是不能够看到苹果的。

    我们进行编译检测:

    这个是对应的函数编号,我们不做考虑。

    我们可以使用命名空间域的方式来访问命名空间内部的内容:

    1. #include
    2. #include
    3. namespace bit
    4. {
    5. int rand = 0;
    6. }
    7. int main()
    8. {
    9. printf("%d\n", rand);
    10. printf("%d\n", bit::rand);
    11. }

    我们进行编译:

     

    我们在一些c++代码中总会看到开头的这样一串代码:

    using namespace std;

     std是c++标准库文件,假如我们要使用c++的语言,我们就要用使用这串代码,这串代码的意思就是解封标准库文件:我们能够自由使用c++标准库里面的内容

    当我们使用了该代码,我们的打印hello bit是这样写的。

    1. #include<iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. cout << "hello bit" << endl;
    6. return 0;
    7. }

    我们进行编译:

    当我们不使用using namespace std时。

    我们就需要使用命名空间域的方法:

    1. #include<iostream>
    2. //using namespace std;
    3. int main()
    4. {
    5. std::cout << "hello bit" << std::endl;
    6. return 0;
    7. }

    我们进行编译:

     

    这里的符号<<其实可以理解为流向的意思。

     这里表示字符串hello bit流向了对象cout中

     后面的endl是endline的意思,就是换行的意思。

    这串代码相对于c语言的有点就是它可以自动识别类型。

    1. #include<iostream>
    2. //using namespace std;
    3. int main()
    4. {
    5. /*std::cout << "hello bit" << std::endl;*/
    6. int a = 10;
    7. double b = 10.11;
    8. printf("%d %.2f\n", a, b);
    9. std::cout << a << " " << b << std::endl;
    10. return 0;
    11. }

     我们进行编译:

     我们使用c语言的方式打印时,还需要加上%d %lf等符号,但是用c++可以自动识别参数的类型并打印。

     

  • 相关阅读:
    mysql8.x 解压版安装过程中出现计算机中丢失vcruntime140_1.dll
    金仓数据库 KingbaseES 客户端编程接口指南 - PHP PDO (3. PHP配置连接KingbaseES)
    Nginx.conf设置nginx优化(二)
    AI编程工具:一站式编程解决方案,引领AI编程新时代
    Fedora 39 正式发布
    C语言:关键字----switch、case、default(开关语句)
    【vue3】05. 跟着官网学习vue3
    《Vue入门到精通之webpack详解》
    家用电脑做服务器,本地服务器搭建,公网IP申请,路由器改桥接模式,拨号上网
    前端常用的几种布局方式(易懂版)
  • 原文地址:https://blog.csdn.net/qq_66581313/article/details/126855492