《啊哈算法》第一章--排序

news2024/12/23 0:06:56

在这里插入图片描述

文章目录

  • 前言
  • 一、排序算法
  • 二、桶排序
  • 三、冒泡排序
  • 三、快速排序
  • 总结


前言

今年蓝桥杯没有拿到省一,所以就决定沉下心来学习算法,为了使得算法的学习更加稳固,所以就拿起了,最基础的且最经典的一本算法书《啊哈算法》,并决定把我的学习过程写成博客,进行记录和分享。


一、排序算法

冒泡排序

最慢的,并且是在数据比较少的时候使用,时间复杂度为O(n^2)

桶排序

时间复杂度最低,即速度快,为O(N + C),N为循环次数,C为N*(logN - logM),M为桶的数量 这里可以看本书的第一节结尾部分

快速排序

时间复杂度为O(N*logN),类似函数sort()排序,这也是以后算法比赛当中经常用到的排序,主要思想是 分治 思想

二、桶排序

桶排序,顾名思义要设置很多桶或者容器,显然在计算机内可以是数组,所以我们在排序 0 ~ 2e9(2109),就需要2*109个桶,也就是申请210^ 9个变量,即使只对3个数排序,仍需要这么大的空间,就很浪费.

在这里插入图片描述
eg:五个小朋友拿到的旗子上边的数字分别为 5 3 5 2 8 ,然后要求你从大到小进行排序

#include<iostream>
using namespace std;
int book[10];//全局变量 自动 初始化为0 
int main()
{
	int t;
	for(int i=0;i<5;i++)//输入五个数字 
	{
		cin>>t;//输入的数字 
		book[t]++;//出现的数字次数++ 
	}
	for(int i=8;i>=0;i--)//i定义为分数 
		for(int j=0;j<book[i];j++)//分数出现的次数 
			cout<<i<<" ";
	return 0;
}

数据如下

输入:5 3 5 2 8
输出:8 5 5 3 2

三、冒泡排序

冒泡排序又叫Bubble Sort,其原理就是每次比较相邻两个元素,如果顺序不对,就交换。
在这里插入图片描述
前面我在C语言学习的时候就多次写过关于冒泡排序的代码,详细可以去看博客C语言—数组—总结

eg:现在有5名同学的分数需要我们去从大到小进行排序 分数分别为 89 90 69 100 67

#include<iostream>
using namespace std;
int score[6];//全局变量自动初始化为0
int i,j;
int main()
{
	for(i=0;i<5;i++)//五次输入
		cin>>score[i];
		
	for(i=0;i<5-1;i++)//冒泡排序的趟数
		for(j=0;j<5-1-i;j++)
		{
			if(score[j]<score[j+1])//交换
			{
				int tmp=score[j];
				score[j]=score[j+1];
				score[j+1]=tmp;
			}
		}
	//输出
	for(i=0;i<5;i++) cout<<score[i]<<" ";
	cout<<endl;
	
	return 0;
}

数据如下

输入:89 90 69 100 67
输出:100 90 89 69 67

三、快速排序

快速排序的知识讲解:

快速排序的核心思想基于分治
快速排序主要的内容就是:

  • 确定分界点:q[L],q[(L+R)/2],q[R] 其实就是分为左边界,中间值和右边界,甚至随机一个数

  • 调整区间,其实就是把元素放到x的两侧

  • 递归处理左右两段
    在这里插入图片描述
    下面就是具体讲解步骤二的调整区间
    在这里插入图片描述

  • 两个指针,i,j不断在这里面移动

  • 当指针i指向的元素<=x的时候就指针向右移动同理指针j遇到>=x的时候就指针向左移动

  • 当i指针指向的元素>=x的时候停下来,等到j指针指向的元素<=x的时候就也停下来

  • 最后使得这两个元素进行swap交换一下

在这里插入图片描述
以上就是快速排序的基础知识啦,下面就要讲解一些习题来巩固和练习我们所讲解的知识点啦

快排思想图:
在这里插入图片描述

详细可以看我写的acw算法笔记【algorithm】算法基础课—排序算法(附笔记 | 建议收藏)


总结

算法确实很难,但是不是谁都是一开始就很厉害,而是开始了才会变得厉害!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis进阶底层原理- 持久化

Redis作为基于内存的缓存数据库&#xff0c;就会存在断电即失的问题&#xff0c;所以数据的持久化是非常重要的。Redis随着版本升级迭代&#xff0c;持久化技术也在不断的升级&#xff0c;&#xff08;从最开始的RDB&#xff0c;到的Redis1.1版本加入AOF&#xff0c;3.0版本支持…

全志F1C200S嵌入式驱动开发(sd卡驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 说是sd卡,其实是micro sd卡,或者称之为tf卡更合适。一般的soc都支持从tf卡启动,所以用tf卡来学习soc、驱动和linux,对新人来说是比较合适的。前面我们已经用sd卡构建了一个类似…

uniapp:针对与富文本解析的几种方法

第一章、富文本的解析方法 1.1 uniapp自带组件&#xff1a;rich-text <rich-text :nodes"nodes"></rich-text> 1.2 v-html <view v-html"item.content"></view> 1.3 uview组件&#xff1a;u-parse <u-parse :content&quo…

学习babylon.js --- [3] 开启https

babylonjs提供WebVR功能&#xff0c;但是使用这个功能得用https&#xff0c;本文讲述如何使用自签名证书来开启https&#xff0c;基于第二篇文章中搭建的工程。 一 生成自签名证书 首先要安装openssl&#xff0c;这个去网上搜下就行了。安装完之后在终端下输入openssl回车可以…

DeepC 实用教程(三)环境数据

目 录 一、前言二、风谱/风剖三、洋流四、波浪4.1 规则波浪4.2 随机波浪谱 五、方向六、海床属性七、位置7.1 创建位置7.2 规则波时域条件7.3 随机波时域条件7.4 波浪散布图7.4.1 散布图分块7.4.2 时域条件 八、参考文献 一、前言 SESAM &#xff08;Super Element Structure A…

y0usef靶场详解

y0usef靶场详解 靶机感悟&#xff1a;对于这个靶机并没有太多的难点&#xff0c;也没有的别多的绊子&#xff0c;就是猜测下一步是什么&#xff0c;耐心的去思考怎么才能进行到下一步。 靶机下载地址&#xff1a;https://download.vulnhub.com/y0usef/y0usef.ova 这个靶机是…

每天一点Python——day55

#第五十五天Python内置数据结构&#xff1a;列表、字典、元组 本次学另外一种数据结构&#xff1a;集合 集合也是可变类型序列 重点&#xff1a;集合里面没有value&#xff0c;只有键&#xff0c;采用也是哈希函数#如图&#xff1a; #集合与字典的对比字典&#xff1a; 字典{ke…

Java 提供的线程安全集合

一、CopyOnWrite&#xff08;COW算法的容器&#xff09; 最终一致性、写分离思想。 用Volatile修饰&#xff0c;每次直接从内存地址中读取&#xff0c;读取时不加锁。 写时用显式锁整个容器&#xff08;防止其它写线程&#xff09;&#xff0c;然后拷贝一份副本&#xff0c;对…

【NLP】transformers的位置编码

一、背景 本文是“实现的变压器”系列的第二篇。它从头开始引入位置编码。然后,它

【Linux | Shell】结构化命令 - if 语句

目录 一、概述二、if-then 语句三、if-then-else 语句四、if-then-elif 语句五、嵌套 if 语句 一、概述 前面文章介绍了一些Shell脚本的基础知识&#xff0c;也了解了怎样构建一个shell脚本文件&#xff0c;让shell脚本执行一些基础的指令&#xff0c;但都是从上到下依次执行的…

少年侠客【InsCode Stable Diffusion美图活动一期】

少年侠客【InsCode Stable Diffusion美图活动一期】 文章目录 Stable Diffusion 模型在线使用地址第一张图第二张图第三张图第四张图第五张图第六章图 一、InsCode Stable Diffusion 体验1.1 界面很友好1.2 小小体验一下1.3 体验感受 二、如何在InsCode给Stable Diffusion安装L…

车载软件架构 —— 闲聊几句AUTOSAR OS(九)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

Keil中文注释乱码解决

1、打开Keil之后&#xff0c;点击Edit 2、点击Configuration 3、 选择Encording &#xff0c;在下拉列表中 选择Chinese GB2312 保存设置&#xff0c;重启keil。

4-1 Working with images

4-Real-world data representation using tensors How do we take a piece of data, a video, or a line of text, and represent it with a tensor in a way that is appropriate for training a deep learning model? This is what we’ll learn in this chapter. We menti…

Spring Boot环境配置Envirnoment

Srping Boot 中我们使用 EnvironmentAware 注入 Environment 对象后&#xff0c;可以在 Environment 中获得系统参数&#xff0c;命令行采参数&#xff0c;文件配置等信息。 Environment 是如何存储&#xff0c;管理这些值的呢&#xff1f;变量发生冲突怎么办呢&#xff1f;我…

Linux--fork创建子进程,操作系统都做了什么

一句话总结&#xff1a;为该进程创建内核数据结构task_struct、地址空间mm_struct、页表并创建映射关系&#xff0c;一定程度上还要将该进程的代码和数据加载进内存 以下是对上面的解释&#xff1a; 首先&#xff0c;fork创建子进程&#xff0c;是不是操作系统里多了一个进程&…

Android ART虚拟机系列: 虚拟机CheckPoint机制分析

背景 在Android ART虚拟机中&#xff0c;GC的部分流程中会执行stop the world的操作&#xff0c;那么&#xff0c;STW在虚拟机中如何实现呢&#xff1f;本文就深入到ART虚拟机源码中&#xff0c;探寻STW的实现过程。 【本文基于android12源码分析】 CheckPoint机制 ART虚拟机…

SPSS数据文件的合并

数据文件合并的方式分为个案合并和变量合并。 个案合并指在两个数据文件拥有同共同变量时&#xff0c;将其中一个数据文件的个案合并到另一个数据文件中。变量合并指在两个数据文件拥有共同个案时&#xff0c;将其中一个数据文件的变量合并到另一个数据文件相应的个案中。 1…

文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;60&#xff09;-- 算法导论6.4 4题 四、证明&#xff1a;在最坏情况下&#xff0c;HEAPSORT 的时间复杂度是Ω (nlgn)。 文心一言&#xff1a; 要证明在最坏情况下&#xff0c;HEAPSORT 的时间复杂度是 Ω(n log n)&#xff0c…

Asymmetric Student-Teacher Networks for Industrial Anomaly Detection

用于工业异常检测的不对称学生-教师网络 摘要介绍模型架构总体介绍&#xff1a;教师网络学生网络 实验结论 时间&#xff1a;2022.10.14 期刊&#xff1a;WACV 之前师生网络结构的不足&#xff1a; 具有类似体系结构的学生网络&#xff0c;当输入不属于训练分布的数据时&#…