算法学习笔记(4)-基础排序算法

##O(n^2)算法时间复杂度的排序算法

目录

##O(n^2)算法时间复杂度的排序算法

##选择排序

##原理

##图例

##代码实现示例

##冒泡排序

##原理

##图例

##代码实现示例

##插入排序

##原理

##图例

##代码实现示例

##总结 


##选择排序

##原理

在一个无序的数组或者列表中,从第一个元素到最后一个元素中选择一个最小的元素与第一个元素进行交换,即第一个元素位置就变成了有序区域,而对于无序区域重复以上过程,一个完整的选择排序就实现完成了。

##图例

##代码实现示例

#python代码示例
def SelectionSort(ls) :n = len(ls)#这里为什么是n-1呢这里说明一下#我们要进行n-1轮的选择for i in range(n-1) :min = i #设置当前位置为最小值for j in range(i+1,n) : #从当前位置开始到最后一个位置进行选择if ls[j] < ls[min] :min = jls[min],ls[i] = ls[i],ls[min]print(ls) #查看每一轮的选择结果,便于理解
ls = [2,3,4,5,1,1]
SelectionSort(ls)

//c++代码示例
void selection_sort(vector<int> &a)
{int n = a.size() ;for (int i = 0 ; i < len - 1 ; i++){int min = i ;for (int j = i + 1 ; j < len ; j++){if (a[j] < a[min]){min = j ; //记录最小元素的索引}}if (min != i) //交换操作,也可以利用swap函数 swap(a[i],a[min]){int temp = a[min] ;a[min] = a[i] ;a[i] = temp ;}}
}

##冒泡排序

##原理

通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。(不仅仅可以实现递增顺序,同样也可以实现递减顺序),每一次循环都会形成一个有序区域和无序区域。

##图例

##代码实现示例

//c++代码示例
void bubble_sort(vector<int> &nums)
{int n = nums.size() ;//外循环未排序的区域为[0,i]for (int i = n - 1 ; i > 0 ; i--){//内循环,将未排序的区域[0,i]中的最大元素交换至区间的最右端for (int j = 0 ; j < i ; j++){if (nums[j+1] < nums[j]){//可以使用std::swap()函数,进行交换int temp = nums[j+1] ;nums[j+1] = nums[j] ;nums[j] = temp ;}}}
}
def BubbleSort(ls):n = len(ls)for i in range(n-1,0,-1) : #这里说明以下为什么不是range(n-1,-1,-1),因为自己不需要和自己比较for j in range(i) :if ls[j] > ls[j+1] :ls[j],ls[j+1] = ls[j+1],ls[j]print(ls) #查看交换结果,便于理解整个过程

##插入排序

##原理

我们在未排序区间选择一个基准元素,将该元素与其左侧已排序区间的元素逐一比较大小,并将该元素插入到正确的位置。

我们将基准元素作为一个有序区,然后遍历无序区将无序区的元素插入到有序区域的适合位置。

##图例

##代码实现示例

1

def InsertSort(ls) :n = len(ls)for i in range(1,n) : #选取第一个元素为基准值,循环下标从1开始x = ls[i] #记录未排序区间的待插入元素j = i - 1 #遍历有序区域,找到待插入的位置while j >= 0 : if x <= ls[j] : #若待插入元素小于当前有序区的元素,有序区元素后移一位ls[j+1] = ls[j]else :breakj -= 1ls[j+1] = x #将元素插入到指定位置print(ls) #查看每一步的插入

3

void bubble_sort(vector<int> &nums)
{int n = nums.size() ;for (int i = 1 ; i < n ; i++){base = nums[i] ;j = i - 1 ;while (j >= 0 && base < nums[j]){nums[j+1] = nums[j] ; 向右移动一位j-- ;}nums[j+1] = base ; }
}

##总结 

  • 冒泡排序基于元素交换实现,需要借助一个临时变量,共涉及 3 个单元操作;插入排序基于元素赋值实现,仅需 1 个单元操作。因此,冒泡排序的计算开销通常比插入排序更高
  • 选择排序在任何情况下的时间复杂度都为 𝑂(n^2) 。如果给定一组部分有序的数据,插入排序通常比选择排序效率更高
  • 选择排序不稳定,无法应用于多级排序。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hashmap详细解析,原理及使用方法分析

hashmap基本原理 根据的hashCode值存储数据。由数组链表组成的&#xff0c;Entnr数组是HashMap的主体&#xff0c;数组中每个元素是一个单向链表。链表则是1/1解哈希冲突而存在的。在lava8中&#xff0c;使用红黑树优化。当链表长度大于8并且元素个数大于64&#xff0c;转为红…

【3dmax笔记】028:倒角的使用方法

一、倒角描述 在3dmax中创建倒角效果可以通过多种方法实现,以下是几种常见的方法: 使用倒角修改器。首先创建一个图形(如矩形和圆),然后对齐它们,将它们转化为可编辑样条线,并附加在一起,选择要倒角的边缘,然后使用倒角修改器来调整高度、轮廓等参数。使用倒角剖面修…

泽攸科技无掩模光刻机:引领微纳制造新纪元

在当今科技迅猛发展的时代&#xff0c;微纳制造技术正变得越来越重要。泽攸科技作为这一领域的先行者&#xff0c;推出了其创新的无掩模光刻机&#xff0c;这一设备在微电子制造、微纳加工、MEMS、LED、生物芯片等多个高科技领域展现出了其独特的价值和广泛的应用前景。 技术革…

aws s3

列出关键点 创建s3 设置s3策略&#xff0c;所有人访问 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", …

未授权访问:Docker未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、通过crontab反弹宿主机shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好…

【Python时序预测系列】灰狼算法(GWO)优化LSTM实现单变量时间序列预测(案例+源码)

这是我的第279篇原创文章。 一、引言 灰狼算法&#xff08;GWO&#xff09;是一种新型的优化算法&#xff0c;灵感来源于灰狼群体中的社会行为。在灰狼算法中&#xff0c;每只灰狼都有自己的位置和适应度值&#xff0c;通过模拟灰狼群体的行为来搜索最优解。将灰狼算法应用于优…

Nginx内网环境开启https

文章目录 前言一、open-ssl1. 验证2. 安装3.生成ssl证书 一、nginx1. 验证支持模块2. 安装必要模块2.1 重新编译nginx2.2 替换原文件 3. 配置https 总结 前言 nginx开启https前提&#xff1a; 服务器支持open-sslnginx 包含--with-http_ssl_module --with-stream --with-stre…

【漏洞复现】泛微OA E-Cology ResourceServlet文件读取漏洞

漏洞描述&#xff1a; 泛微OA E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology ResourceServlet存在任意文件读取漏洞&#xff0c;允许未经授权的用户…

Android手机恢复软件——如何从Android手机内存中恢复已删除或丢失的文件?

大多数 Android 手机的内存上都有数据。通常&#xff0c;我们会在手机上存储大量私人和重要数据&#xff0c;例如联系人&#xff0c;图片&#xff0c;音乐&#xff0c;便笺等。有时我们不小心删除了这些项目&#xff0c;我们需要想办法恢复它。那么&#xff0c;您是否有任何可靠…

【专利】一种日志快速分析方法、设备、存储介质

公开号CN116560938A申请号CN202310311478.5申请日2023.03.28 是我在超音速人工智能科技股份有限公司(833753) 职务作品&#xff0c;第一发明人是董事长夫妇&#xff0c;第二发明人是我。 ** 注意** &#xff1a; 内容比较多&#xff0c;还有流程图、界面等。请到 专利指定页面…

实现 Flask 应用的 HTTPS 加密保护

文章目录 1. 获得免费的 SSL 证书步骤&#xff1a; 2. 配置 Flask 应用3. 测试和部署结论结论 在今天的网络环境中&#xff0c;保护网站和用户数据的安全至关重要。通过在 Flask 应用中启用 HTTPS 加密&#xff0c;您可以确保用户的数据在传输过程中得到保护。本文将介绍如何结…

数字化转型:超越信息化,构建数字化营销体系!

在数字化的浪潮中&#xff0c;企业仅仅做好信息化数字能力基础已远远不够&#xff01;那么&#xff0c;还需要什么呢&#xff1f;没错&#xff0c;就是在数字化经营思维的指导下&#xff0c;建立起数字化营销体系和执行方案&#xff01;这是企业在数字时代中立于不败之地的关键…