排序稳定性的意义

首先,为什么会有排序算法稳定性的说法?只要能排好不就可以了吗?

看例子
第1行是数字2 记作 1 2
第2行是数字4 记作 2 4
第3行是数字2 记作 3 2

在这里插入图片描述

排序后的结果(如果看不懂命令的意思,参照这个博客)
在这里插入图片描述

那么引入我们的问题,有没有可能排序结果是这样子

在这里插入图片描述

排序的结果是正确的,可是它却打乱了原本的文件顺序。

那么在什么场景会出现这种情况呢?

我们在管理数据的时候,比如有ID和体重。那么胖的排前面,轻的排后面,没问题!如果是体重相等呢?那就按服从ID排序了!

起始稳定排序的意义就是保证两次排序结果相同,好好体会这句话的意义。

快速排序和归并排序的平均时间复杂度都是一样的,那为什么不全部都用归并排序?

归并排序需要开辟额外的空间,在数据较小时,可能不占优势。

数组长度快速排序(运行时间/毫秒)归并排序(运行时间/毫秒)
10000
100011
1000013
1000001414
100000079120
100000009821186
1000000005573312328
算法最坏时间复杂性平均时间复杂性
快速排序n^2n*log(n)
归并排序n*log(n)n*log(n)

例子

例如要排序的内容是一组原本按照价格高低排序的对象,如今需要按照销量高低排序,使用稳定性算法,可以使得想同销量的对象依旧保持着价格高低的排序展现,只有销量不同的才会重新排序。(当然,如果需求不需要保持初始的排序意义,那么使用稳定性算法依旧将毫无意义)
换句话说,以某种关键字的方式排序后,能不影响到其他关键字原来排序结果的方法就是稳定的,比如一开始按照价格高低排序结果为 a(10元,卖了5个) b(8元,卖了20个) c(6元,卖了20个) d(4元,卖了30个),则按照销量重拍后如果保持 d(30个,价格为4元) b(20个,价格为8元) c(20个,价格为6元) a(5个,价格为10元),则说明该方法为稳定的,而如果出现c在b前,破坏了排序前b在c前的顺序,则说明这个方法是不稳定的

在这里插入图片描述

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

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

相关文章

C++ 常用拷贝和替换算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std;/* copy算法 将容器内指定范围的元素拷贝到另一容器中 param beg 容器开始迭代器 param end 容器结束迭代器 p…

防火墙的基础知识入门

文章目录防火墙基于实现方式&#xff0c;防火墙的发展分为四个阶段:Linux 环境中主要的防火墙形式TCP wrappers~~详解~~ 粗解Tcp wrappers的认识它的基本过程是这样的&#xff1a;iptable攻击和防御DDOS 攻击常见的可能受到 DDOS 攻击体现的症状有&#xff1a;而常见的 DDOS 攻…

C++ 常用算数生成算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> using namespace std; #include <algorithm> //不好使 #include <numeric> //好使 #include <iterator> /* accumulate算法 计算容器元素累计总和 param beg 容器开始迭代…

fork()请问下面的程序一共输出多少个“A”?多少个-?

题目&#xff1a;请问下面的程序一共输出多少个“-”&#xff1f; #include #include #include int main(void) { int i; for(i0; i<2; i){ fork(); printf("-"); } return 0; } 解析&#xff1a;一共输出8个。 首先程序一开始&am…

C++ 常用集合算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <iterator> using namespace std;/* set_intersection算法 求两个set集合的交集 注意:两个集合必须是有序序列 param beg1 容器1开始迭代器 par…

本能富可敌国,最后却选择拯救世界!Bram的Vim和乌干达儿童

他本能富可敌国&#xff0c;最后却选择拯救世界 在命令行界面输入vim会出现一堆文件&#xff0c;但是一直有这么一句话 Help poor children in Uganda! “帮助可怜的乌干达儿童” 查询了一下这里面相关的历史背景和知识 在Vim许可证文件结束后的部分翻译 &#xff0d;如果…

linux 常用命令01

/bin/bash 就是linux默认的shell ls命令 ls -a 显示所有文件 包含隐藏文件 ls -R 递归显示子目录 ls -l 显示详细信息 ls -lrt 按照时间排序&#xff0c;显示文件信息 配合通配符使用 ls *.c *匹配任意多个字符 ls xx.? 匹配任意一个字符 cd 命令 cd - 为切换到上次目录 cd 回…

Linux基础查漏补缺

文章目录第二遍重新回顾Linux基础查看主机名修改主机名查看IP地址Linux的 “--”和“-”根目录文件的意义和作用alias直接在命令行界面输入firefox数组越界发生什么命令行光标移动的几个操作重定向第二遍重新回顾Linux基础 1.查找忽略的知识点 2.再次记忆一些基础知识 3.巩固基…

linux 常用命令02--文件属性 以及软硬链接

文件属性和用户用户组 通过ls-l 显示文件详细信息 drwxrwxr-x 2 user usergroup 4096 10月 30 20:55 stu1drwxrwxr-x d代表目录文件&#xff0c; -代表普通文件 rwx rwx r-x 归属用户的权限 归属组的权限 其他用户的权限 权限位数字表示法(8进制数…

linux查漏补缺之常用命令

wc命令 -c, --bytes, --chars输出字节统计数。-l, --lines输出换行符统计数。-L, --max-line-length输出最长的行的长度。-w, --words输出单词统计数。grep命令 图解

linux 常用命令03--修改文件的权限与归属

chmod 命令 改变文件权限 第一种&#xff1a; chmod [u|g|o|a] [|-] [r|w|x] filename 比如&#xff1a; chmod ux filename 给所属用户增加执行的权限第二种&#xff1a; 给a.out 文件&#xff0c;所属用户可读可写&#xff0c;所属组可读可写&#xff0c;其他的读 chmod 06…

思维导图:面试小结

文件&#xff1a;思维导图

linux 常用命令04 查找和检索

先说一下 文件的基本类型 文件类型 l 符号链接文件&#xff08;软连接&#xff09; b 块设备 &#xff08;磁盘文件&#xff09;c 字符设备p 管道设备&#xff08;pipe&#xff09;s 本地套接字&#xff08;网络编程&#xff09;- 普通文件 用find命令的时候&…

linux 常用命令05 常用的压缩与解压缩文件

zip/unzip ----zip格式 使用方式&#xff1a;zip -r 压缩包名 原材料 -r代表递归子目录 原材料可以有多个 例如&#xff1a;zip -r bb.zip bb hello 对应的解压缩&#xff1a;unzip bb.zip .gz格式的压缩包 gzip和gunzip tar 最常用打包工具 .tar.gz tar相应参数介绍 -c 压缩…

apt-howto

https://www.debian.org/doc/manuals/apt-howto/index.zh-cn.html#contents

Linux系统监控shell脚本

开源项目 https://github.com/atarallo/TECMINT_MONITOR #! /bin/bash # unset any variable which system may be usingunset tecreset os architecture kernelrelease internalip externalip nameserver loadaveragewhile getopts iv name docase $name ini)iopt1;;v)vopt1…

linux ubuntu 软件安装的三种方式

apt-get 自动安装软件&#xff0c;解决依赖关系 sudo apt-get update 更新源 源在 /etc/apt/sources.list 文件中sudo apt-get install softwarename sudo apt-get remove softwarenamedpkg 根据deb安装包来安装软件 dpkg 是“Debian Packager ”的简写 sudo dpkg -i xxx.de…

linux 用户管理以及其他命令

设置用户组 sudo groupadd test 增加test用户组创建用户 选项&#xff1a; -s 指定shell -g 指定组 -d 用户家目录 -m 家目录不在时&#xff0c;自动创建 sudo useradd -s /bin/bash -g test -d /home/newuser -m newuser设置密码 sudo passwd newuser切换用户 su xiaowan…

蒙特卡洛法求圆周率100亿数据

代码 import time import random hits0 pi0 DARTS100000*100000 starttime.perf_counter() for i in range(DARTS):x,yrandom.random(),random.random()distpow(x ** 2y**2,0.5)if dist < 1.0:hits1 pi4*(hits/DARTS) print("圆周率的值是{:.10f}".format(pi)) p…

linux gcc 简单使用记录01

大体编译流程 gcc 参数&#xff1a; I 包含头文件路径 L 包含库文件路径 l 库名 比如libxxx.so 对应着 -lxxx(掐头去尾) O 优化选项 1&#xff0c;3 W 警告 all 显示更多的 c 编译成 .o 文件&#xff08;二进制&#xff09; E 输出到标准输出&#xff0c;宏替换&#xff0c…