首页 > 编程语言 >C++U3-第2课-基础排序(二)

C++U3-第2课-基础排序(二)

时间:2023-11-26 20:22:25浏览次数:30  
标签:int 代码 C++ 插入 U3 数组 排序 输入

上节课作业讲师视频分享链接:百度云网盘

链接:https://pan.baidu.com/s/1PFBLFdX6C-9FhKXWrhDBew?pwd=l8r3
提取码:l8r3

本节课教学目标

 插入排序概念

 插入排序的代码和思路分析

 

 插入代码详细解释

【题意分析】
1.从第一个元素开始,该元素可以认为已经被排序;

2.取出下一个元素,在已经排序的元素序列中从后向前扫描;

3.如果该元素(已排序)大于新元素,将该元素移到下一位置;

4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;

5.将新元素插入到该位置后;

【思路分析】
从当前a[i]的位置从后往前开始找,使用while循环,从当前的位置向前找,如果前面的数大于现在选择要插入的数,那么将前面的数往后移动一位最后用for循环输出这一趟排序的结果。

输入n一个数组

从第二位开始进行插入排序

当前需要插入的数为当前的第i个数,从后往前比较

如果j不小于1,并且前面的数比当前需要插入的数大,那么将前一位的数后移

插入当前的数,并且把这一趟插入后的数组输出


【参考代码】
#include <iostream>
using namespace std;
int a[110];
int main() {
    //输入n一个数组
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    //从第二位开始进行插入排序
    for (int i = 2; i <= n; i++) {
        //当前需要插入的数为当前的第i个数,从后往前比较
        int key = a[i], j = i - 1;
        //如果j不小于1,并且前面的数比当前需要插入的数大,那么将前一位的数后移
        while (j >= 1 && a[j] > key) {
            a[j + 1] = a[j];
            j--;
        }
        //插入当前的数,并且把这一趟插入后的数组输出
        a[j + 1] = key;
        for (int i = 1; i <= n; i++) {
            cout << a[i] << " ";
        }
        cout << endl;
    }
    return 0;
}
View Code

 

桶排序思路

 

 桶排序代码思路

 

桶排序代码

桶排序思路

桶排序这段代码是使用桶排序算法对输入的数组进行排序。下面是对代码的详细思路解释:

cpp
#include <iostream>
using namespace std;

int a[110]; // 定义一个大小为110的整数数组a

int main() {
    int n;
    cin >> n; // 输入n,表示数组中元素的个数

    for (int i = 0; i < n; i++) {
        int x;
        cin >> x; // 输入数组中的元素x

        a[x]++; // 将出现的数字x用桶标记,即在数组a中对应位置上加1
    }

    for (int i = 1; i <= 100; i++) {
        for (int j = 1; j <= a[i]; j++) {
            // 遍历数组a,输出i出现a[i]次,即输出a[i]个i
            cout << i << " ";
        }
    }

    return 0;
}
代码的具体思路如下:

1声明一个大小为110的整数数组 a,用于存储待排序数组中每个数字的出现次数。数组下标代表数字,数组值代表该数字的出现次数。
2读取输入的整数 n,表示待排序数组中元素的个数。
3使用 for 循环遍历 n 次,每次读取一个元素 x。
4在数组 a 中将元素 x 对应的位置 a[x] 的值加1,表示数字 x 出现了一次。
5使用两层嵌套的 for 循环,外层循环从1到100,内层循环根据数组 a 的值逐个输出数字。
6外层循环变量 i 代表数字,内层循环变量 j 遍历该数字出现的次数 a[i]。
7在内层循环中,每次输出数字 i,即将该数字按照出现次数逐个输出。
8完成排序后,返回0表示程序正常结束。
9桶排序算法利用了一个辅助的桶数组,将待排序的元素根据其值放置到对应的桶中,然后按照桶的顺序依次输出元素,实现排序。在这段代码中,通过数组 a 来作为桶,记录每个数字在输入数组中出现的次数,并按照顺序输出相应的数字。
View Code

 

【题意分析】
需要将每一个数放入到桶,然后从小到大遍历桶,如果桶不为0,那么有多少个就输出多少次

【思路分析】
设计一定数值范围的 "桶",将属于这个范围的数值按下标,以计数的方式记录到 "桶" 中,然后根据记录的数量,输出多少次即可。

输入n和数组,并且将出现的数用桶标记

遍历数组cnt,注意遍历的范围是数字的范围(1~100)

i出现的次数是 a[i],则输出 a[i]个i

【参考代码】
#include <iostream>
using namespace std;
int a[110];
int main() {
    //输入n和数组,并且将出现的数用桶标记
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x; 
        a[x]++;
    }
    //遍历数组cnt,注意遍历的范围是数字的范围(1~100)
    for (int i = 1; i <= 100; i++) {
        for (int j = 1; j <= a[i]; j++) {
            //i出现的次数是 a[i],则输出 a[i]个i
            cout << i << " ";
        }
    }
    return 0;
}
View Code

 

 sort排序

 

 示例代码

【题意分析】
将当前数组放入到sort中直接排序一遍就可以得出答案了

【思路分析】
sort函数没有第三个参数,默认为升序

输入n并且输入n的数组

用sort排序完毕后直接输出

【参考代码】
#include <iostream>
#include <algorithm>
using namespace std;
int a[110];
int main() {
    //输入n并且输入n的数组
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    //用sort排序完毕后直接输出
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++) {
        cout << a[i] << " ";
    }
    return 0;
}
View Code

 

标签:int,代码,C++,插入,U3,数组,排序,输入
From: https://www.cnblogs.com/jayxuan/p/17857843.html

相关文章

  • C++11以及17部分特性
    1//1、并发支持2//1.1、C++11内存模型:3//a.原子性(Atomicity):对于原子类型(std::atomic),其成员函数的操作是原子的,不会被其他线程中断。4//b.可见性(Visibility):对于非原子类型,通过使用互斥量或同步操作来确保共享数据的可见性,即在一个线程中对共享数据的......
  • 定义二维数组,冒泡排序法
    //#define_CRT_SECURE_NO_WARNINGS1////#include<stdio.h>//#include<stdlib.h>//#include<string.h>//#include<math.h>//voidbubble_sort(intarr[],intsz)//{// inti=0;// for(i=0;i<sz-1;i++)// {// intj=0......
  • C++ ini 实现
    首先是从https://github.com/benhoyt/inih取用的ini读取类头文件//fileini.h/*inih--simple.INIfileparserSPDX-License-Identifier:BSD-3-ClauseCopyright(C)2009-2020,BenHoytinihisreleasedundertheNewBSDlicense(seeLICENSE.txt).Gotothe......
  • Windows App SDK? C++/WinRT? 狗都不学!
    空荡荡的官网开发文档,打开直接心凉一截!只写个HelloWorld教程就敢宣布自己为“跨时代”新产品?什么“C++桌面开发者的狂欢”?什么ProjectReunion?笑死!直接让所有C++WinAPI爱好者变成真正的......
  • C++聊天集群服务器1
    ​ 先给出整个项目的结构图:​ 一、环境搭建​ 施磊的c++聊天项目。相信已经到了这部分内容就已经能够自行搭建环境了,这里主要给出搭建的具体内容,方法自行百度。下面给出环境要求。​ 1.json-cpp​ 2.muduo库​ 3.cmake​ 4.mysql二、CMake编写​ 主目录下的cmakecmake_m......
  • C/C++ 常用加密与解密算法
    计算机安全和数据隐私是现代应用程序设计中至关重要的方面。为了确保数据的机密性和完整性,常常需要使用加密和解密算法。C++是一种广泛使用的编程语言,提供了许多加密和解密算法的实现。本文将介绍一些在C++中常用的加密与解密算法,这其中包括Xor异或、BASE64、AES、MD5、SHA256、RS......
  • C++ Boost库
    《C++Boost库》1.Preface  cxmsc2.Boost库编译解压boost源码压缩目录Windows平台下,打开cmd,运行脚本bootstrap.bat脚本生成b2.exe文件boost需要通b2.exe来自动编译源码;在编译之前,需要指定一些列参数:首先可通过--help命令来查看相关的参数#展示boost里所有的库b2......
  • C++ 二叉树 家谱
    实验三树家谱文档实验说明要求完成的功能如下,测试输出如图所示:(1)输入一棵二叉树的括号表示法,完成树的构建(2)使用后序遍历递归算法遍历二叉树并输出(3)使用先序遍历非递归算法遍历二叉树并输出(4)指定家谱中的某一成员,输出其所有长辈测试例:输入:A(B(C(E,F),D(G(M,N),H))......
  • C++ 通过SQLite实现命令行工具
    本文介绍了一个基于C++、SQLite和Boost库的简单交互式数据库操作Shell。该Shell允许用户通过命令行输入执行各种数据库操作,包括添加、删除主机信息,设置主机到特定主机组,以及显示主机和主机组列表。通过调用SQLite3库实现数据库连接和操作,以及使用Boost库进行字符串解析......
  • 试题 D: 本质上升序列(C/C++)
    题目描述:小蓝特别喜欢单调递增的事物。在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。例如,在字符串lanqiao中,如果取出字符n和q,则nq组成一个单调递增子序列。类似的单调递增子序列还有lnq......