首页 > 其他分享 >数据结构--交换排序

数据结构--交换排序

时间:2023-08-17 17:11:45浏览次数:32  
标签:排序 -- hight 冒泡排序 int low 数据结构 快速

数据结构--交换排序

基本思想:

两两比较,如果发生逆序则交换,直到所有记录都排好序为止.

image-20230812110517796

冒泡排序

每趟不断将记录两两比较,并且按照"前小后大"规则交换.

image-20230812110914010

冒泡排序的过程演示

image-20230812111202203

image-20230812111340087

image-20230812111821370

n个记录,需要比较n-1趟.

第m躺需要比较n-m次

冒泡排序算法描述

image-20230812112023930

还可以继续优化:某一趟比较时不出现记录交换,说明已经排好序了

image-20230812112238830

改进的冒泡排序算法

image-20230812112523652

时间复杂度

image-20230812112748277

image-20230812112833842

冒泡排序是稳定的

排序方法的比较

image-20230812112858253

快速排序

改进的交换排序

image-20230817153402838

快速排序动画演示

image-20230817153750970

具体步骤

image-20230817154404443

如何更好的划分子表?

使用low指针和hight指针来动态的划分子表

划分出[1,low-1]和[hight+1,n]两个表

image-20230817155137941

快速排序的算法实现

image-20230817160249924

image-20230817155505044

image-20230817160220296

快速排序的算法分析

快速排序的时间复杂度为O(nlogn)

image-20230817160533169

快速排序的空间复杂度

快速排序不是原地排序

image-20230817160734459

快速排序不稳定

image-20230817161039799

快速排序不是自然排序

快速排序不适于对原本有序或基本有序的记录序列进行排序.

image-20230817161347786

image-20230817161527946

排序方法的比较

image-20230817161559885

快速排序的代码实现

#include <bits/stdc++.h>

using namespace std;
const int N = 100005;
int Partition(int a[], int low, int hight) {
	int piv;
	a[0] = a[low]; //将a[low]赋值给a[0]
	piv = a[low]; //将a[low]的值赋值给piv
	while (low < hight) {
		while (low < hight && a[hight] >= piv) {
			hight--;
		}
		a[low] = a[hight];
		while (low < hight && a[low] <= piv) {
			low++;
		}
		a[hight] = a[low];
	}
	a[low] = a[0]; //将
	return low;//low就是最后piv所在的坐标位置
}
void quick_sort(int a[], int low, int hight) {
	int piv;
	if (low < hight) {
		piv = Partition(a, low, hight);
		quick_sort(a, low, piv - 1);
		quick_sort(a, piv + 1, hight);
	}
}
signed main () {
	int a[N];
	int n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	quick_sort(a, 1, n);
	for (int i = 1; i <= n; i++) {
		cout << a[i] << ' ';
	}
	cout << '\n';
	return 0;
}

标签:排序,--,hight,冒泡排序,int,low,数据结构,快速
From: https://www.cnblogs.com/harper886/p/17638179.html

相关文章

  • 百度ueditor编辑器 复制word里面带图文的文章,图片可以直接显示
    ​ 图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪......
  • seata学习-数据源代理
    代理的动机AT模式下执行undo-log回滚日志代理的是DateSource这个类手动代理即手动注入一个DataSourceProxy,如下@BeanpublicDataSourcedruidDataSource(){returnnewDruidDataSource()}//这里会返回名字为"dataSource"的Bean,这里@Primary@Bean(......
  • linux中awk 命令中 NR、FNR内置变量
     001、NR[root@PC1test02]#cata.txt##测试文件12345[root@PC1test02]#catb.txt##测试文件1112131415[root@PC1test02]#awk'{printNR,$0}'a.txtb.txt##NR变量,NR将多个文件的行数累积递增11223344556117128139......
  • MongoDB入门到精通学习路线?深入讲解
    MongoDB入门到精通学习路线?深入讲解学习MongoDB可以按照以下路线进行:1.学习基本概念:掌握MongoDB的基本概念,包括文档,集合,数据库,索引等。了解MongoDB与传统关系数据库的区别。2.安装和配置MongoDB:学习如何安装和配置MongoDB,包括选择适当的版本和安装方法,并配置正确的环境变量。......
  • 教你使用常用的逻辑公式和恒等式等价改写SQL
    今天同事给我一条2秒的SQL看看能不能优化。原始SQL:SELECTpk_deptFROMaaaaWHERE1=1AND((pk_group='0001A110000000000JQ6'ANDpk_orgIN('0001A110000000001M09')))AND(PK_DEPTIN(SELECTt1.ORGIDFROMxxxxxt1......
  • python项目 如何快速的导入和导出依赖包
    Python项目依赖包【导出】第一步:安装pipreqs包pip3installpipreqs第二步骤:进入项目的根目录执行以下命令:cd根目录第三步:转成requirements.ext文件:pipreqs./--encoding=utf-8--force如果成功,就会在根目录下生成一个requirements.txt文件,内容为本项目环境以来包已经对......
  • GPIO输入
    按键:按下导通,松手断开按键抖动:由于案件内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动,比如有5-10ms的时间,对于单片机来说这个抖动是漫长的,所以在程序中,要对这个抖动进行过滤。否则就会出现按键按一下,单片机反应了多次的现象。解决方法:加一段......
  • DateTime 相关的操作汇总【C# 基础】
    〇、前言在日常开发中,日期值当然是不可或缺的,能够清晰的在脑海中梳理出最快捷的实现也非常重要,那么今天就来汇总一下。一、C#中的本机时间以及格式化如何取当前(本机)时间?很简单,一句话解决:DateTimedt_now=DateTime.Now;1.1单字母格式化日期时间值如下示例,将ToString()......
  • esp32 启动流程
    [关于ROM]在esp32上电运行后,芯片运行的第一个程序。这段程序是芯片设计与生产的时候,固化在硬件电路中的。所以它是不可修改的(ReadOnlyMemory)。esp32的ROM负责检测芯片的strapping配置,来决定芯片应该处于什么状态。比如,esp32上电后,ROM程序会检查[GPIO0,GPIO2,GPIO4,......
  • 心理学与计算机科学 人脑与电脑
       心理学与计算机科学的渊源颇深,两者之间相互启发促进由来已久。概因人脑与电脑,一碳一硅,本身就有很高的可比性。人工智能学科的奠基人之一,赫伯特·西蒙(HerbertSimon,又译司马贺)既是一位心理学家也是一位计算机科学家,并获1975年图灵奖、1978年诺贝尔经济学奖以及美国心理学......