数据结构与算法学习(day2)——冒泡排序

news/2025/2/12 22:47:46/

文章目录

  • 前言
    • 冒泡排序
    • 题目
      • 题目一
      • 题目二
    • 小结

前言

(1)在本章的学习此前,需要复习前一章的内容,动手敲一遍代码解题。

(2)经过上一章的操练以后,大家应该体会到了,简化版桶排序所要申请的数组的容量大小由要排序的数中的最大值决定,所以如果我们要排序的数中最大值是210000000,那我们还得申请一个大小为210000001的数组,毫无疑问,非常浪费空间!

(3)而且,简化版桶排序的i表示数值,book[i]表示数值的数量,由于数组要求book[i]中的i的类型必须为整数,所以,如果要排序的存在小数,那简化版桶排序就失效了!

本章的学习目标:

(1)学习冒泡排序原理

(2)会用冒泡排序联系实际生活,解决编程问题

冒泡排序

(1)冒泡排序的基本思想是:每次比较两个相邻的元素,如果他们的顺序错误就把它们交换过来。

(2)代码思路:如果有n个数进行从大到小排序,只需将n-1个数归位,也就是说要进行n-1趟操作。而”每一趟“都需要从第1位开始进行两个数的比较,将较小的一个数放在在后面,比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归位的数,已经归位的数则无需再进行比较(已经归位的数你还比较个啥,浪费表情)。

题目

题目一

输入n个整数,对它们用冒泡排序按从小到大或者是从大到小的顺序排列,并打印出来。

#include <stdio.h>
int main()
{int a[100], i, j, t, n;scanf("%d",&n);for (i = 1; i <= n; i++)scanf("%d",&a[i]);//冒泡排序的核心部分for (i = 1; i <= n - 1; i++){for (j = 1; j <= n - i; j++){//a[j] > a[j + 1]——从小到大排序;a[j] < a[j + 1]——从大到小排序if (a[j] > a[j + 1])  //若a[j] > a[j + 1],则a[j] 与 a[j + 1]调换位置,即大的放数组后面,故实现从小到大排序{t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;}}}//数组内的数据已排好序,这一步按顺序打印出数组内的数值for (i = 1; i <= n; i++)   //若i = 1; 则i <= n;要加等号printf("%d ",a[i]);return 0;
}

题目二

读入n个人的人名和分数,按分数从大到小排序,打印出分数对应的人名。

#include <stdio.h>
struct student
{char name[21];char score;
};   //这里创建了一个结构体,用来存储姓名和分数  
int main()
{struct student a[100], t;int i, j, n;scanf("%d",&n);   //多少个人for (i = 1; i <= n; i++)scanf("%s %d",a[i].name,&a[i].score);//按分数从高到低进行排序for (i = 1; i <= n - 1; i++){for (j = 1; j <= n - i; j++){if (a[j].score < a[j + 1].score) //按从达到小顺序排序{t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;}}}for (i = 1;i <= n; i++)  //i = 1;i <= n;printf("%s\n",a[i].name);return 0;
}

小结

冒泡排序的核心部分是双重嵌套循环,不难看出冒泡排序的时间复杂度是O(N^2)。这是一个非常高的时间复杂度,后面也没有人能成功把冒泡排序改进。

Have a nice day!


http://www.ppmy.cn/news/1093448.html

相关文章

LeetCode 剑指offer 09.用两个栈实现队列

LeetCode 剑指offer 09.用两个栈实现队列 题目描述 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回…

判断一个点是否在一个多边形内部

如下图所示&#xff0c; 四边形ABCD, P在四边形内部&#xff0c;Q在四边形外部。 通过观察可以发现&#xff0c; 当点在四边形内部时&#xff0c; 如果按顺时针方向的话&#xff0c; 点P在四条边AB&#xff0c; BC, CD, DA的右侧。 当然如果按逆时针的话&#xff0c; 点P在四条…

03-zookeeper节点动态上下线案例

服务器动态上下线监听案例 需求 在分布式系统中&#xff0c;主节点可以有多台&#xff0c;可以动态上下线&#xff0c;任意一台客户端都能实时感知到主节点服务器的上下线。 需求分析 客户端能实时洞察到服务器上下线的变化 基本流程&#xff1a; ​ 1.服务端启动时去注册…

深度学习模型的泛化性

暂时无法在飞书文档外展示此内容 零、泛化性 泛化性指模型经过训练后&#xff0c;应用到新数据并做出准确预测的能力。一个模型在训练数据上经常被训练得太好即过拟合&#xff0c;以致无法泛化。 深度学习模型过拟合的原因&#xff0c;不仅仅是数据原因&#xff1a; 模型复…

typeScript学习笔记(一)

学习资源来自&#xff1a; 类与接口 TypeScript 入门教程 (xcatliu.com) 一.TypeScript的安装和运行 1.安装TypeScript 通过npm&#xff08;Node.js包管理器&#xff09;安装Visual Studio的TypeScript插件:(Visual Studio 2017和Visual Studio 2015 Update 3默认包含了Ty…

AMEYA360:思瑞浦推出汽车级超低静态功耗高压LDO—TPL8031Q

聚焦高性能模拟芯片和嵌入式处理器创新研发的半导体公司——思瑞浦3PEAK(股票代码&#xff1a;688536)&#xff0c;推出全新一代汽车级超低静态功耗高压线性稳压器——TPL8031Q。 TPL8031Q拥有支持3V~42V宽输入电压范围、3μA超低静态功耗、多种封装可选等性能优势&#xff0c;…

数学建模竞赛常用代码总结-PythonMatlab

数学建模过程中有许多可复用的基础代码&#xff0c;在此对 python 以及 MATLAB 中常用代码进行简单总结&#xff0c;该总结会进行实时更新。 一、文件读取 python (pandas) 文件后缀名&#xff08;扩展名&#xff09;并不是必须的&#xff0c;其作用主要一方面是提示系统是用…

【解决】多卡服务器GPU不能多用户同时使用的问题

一台多卡服务器&#xff0c;为提高利用效率&#xff0c;通常有多个用户使用。 假设有一台服务器A&#xff0c;分别有0&#xff0c;1&#xff0c;2&#xff0c;3四张卡&#xff0c;我们有两个用户&#xff1a;甲和乙。 当甲启动卡0时&#xff0c;乙想用卡1&#xff0c;2&#…