十大排序算法【1】---冒泡排序、快速排序、选择排序、插入排序、希尔排序

动画演示

各种算法:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
6种常见排序算法:https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

1、冒泡排序

//1、冒泡排序Bubble Sort: 比较前后相邻的数据,按照升序或者降序规则调整
// 由于每次调整没有开辟新的内存空间,一直都是使用一个新内存空间,所以空间复杂度为O(1)
// 由于需要n轮调整,每轮调整 n-- 个数据,时间复杂度为O(n^2)
// data[]是int*指针,数组名,size 是数组的长度,有效数据个数
int* BubbleSort(int data[], size_t size)
{int max;//临时存储最大值//共循环n = size轮for (int i = 0; i < size; i++){//每一轮操作的数据为n = size-i,循环完一轮就排好了一个数,那么需要操作的数就每次-1for (int j = 1; j < size - i; j++){//如果前面的数大于后面的数,就交换,每一轮找到最大的数,并放到最后if (data[j-1] > data[j]){max = data[j-1];data[j-1] = data[j];data[j] = max;}}}return data;
}

2、快速排序

//快速排序QuickSort,对冒泡排序的优化
//分而自治的思想,找一个参考值,左边小于参考值,右边大于参考值,再更换参考值继续
//时间和空间复杂度为O(nlog_2 n)
int* QuickSort(int data[], int left , int right)
{if (left >= right)return data;int i = left;int j = right;int base = data[left];while ( i < j ){//此方法必须先从后面找小的,先从前面会出错while (data[j] >= base && (i < j))//右边边是大的就继续找到小的j--;while (data[i] <= base && (i < j))//左边是小的就继续找到大的i++;if (i < j){int temp = data[i];data[i] = data[j];data[j] = temp;}}data[left] = data[i];data[i] = base;//将base放在中间,左边都是小的,右边是大的QuickSort(data, left, i-1);//先递归左边区域QuickSort(data, i+1, right);return data;
}

3、选择排序

//2、选择排序SelectSort:每一次在所有数据中找出最小值或者最大值,然后在最开始或最末尾进行交换
//需要找n = size次数据,每次找n-i个数据,时间复杂度为O(n^2),空间复杂度为O(1)
int* SelectSort(int data[], size_t size)
{int min, temp;//临时存储最小值和最小值所在的下标for (int i = 0; i < size; i++){min = data[i];//把需要交换的位置做好标记temp = i;for (int j = i + 1; j < size; j++){if (data[j] < min){min = data[j];//如果找到新的最小值,做好标记temp = j;}}data[temp] = data[i];//进行位置的交换,如果当前就是最小值,返回自己data[i] = min;}return data;
}

4、插入排序

//3、直接插入排序InsertSort:每次从后面新增一个数据,然后排好序再新增数据
//新增n = size-1个数据,新增了之后重排i+1个数据,时间复杂度O(n^2),空间复杂度O(1)
int* InsertSort(int data[], size_t size)
{int temp;for (int i = 0; i < size - 1; i++){for (int j = i + 1; j > 0; j--)//每次从后面新增一个数据,并判断大小{if (data[j] < data[j - 1])//如果后面的值大于前面的就交换{temp = data[j-1];data[j - 1] = data[j];data[j] = temp;}}}return data;
}

5、希尔排序

//4、希尔排序SheelSort,对插入排序的优化
//时间复杂度O(n^1.3),空间复杂度O(1)
int* SheelSort(int data[], size_t size)
{int temp;size_t gap = size / 2;while (gap > 0)//最小间隔为1{for (size_t i = gap; i < size; i++)//从第一个间隔位置开始{size_t j = i;while ((j>=gap)&&(data[j]<data[j-gap]))//插入排序{temp = data[j - gap];data[j - gap] = data[j];data[j] = temp;j -= gap;//如果当前位置超过了2倍gap,还需要继续判断,相当于插入排序}}gap /= 2;//每次将gap减半}return data;
}

在这里插入图片描述

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

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

相关文章

消消乐游戏开发,三消游戏,消除小游戏

消消乐是一款非常受欢迎的休闲消除类游戏&#xff0c;通常也被称为“三消游戏”。这类游戏的主要目标是通过交换和匹配三个或更多相同的物品来清除它们&#xff0c;从而得分并通过关卡。以下是一些消消乐游戏的基本特点和玩法&#xff1a; 基本玩法 交换和匹配&#xff1a;玩…

MySQL第六次作业

一、创建部门表 指令&#xff1a; mysql> CREATE TABLE dept (-> dept_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 部门编号,-> dept_name CHAR(20) COMMENT 部门名称-> ); 演示&#xff1a; 二、插入部门数据 指令&#xff1a; mysql> INSERT INTO dept…

去中心化的 S3,CESS 首创去中心化对象存储 DeOSS

Web3 在各个领域的应用和发展已成为讨论的焦点&#xff0c;尽管行业对 Web3 的定义各不相同&#xff0c;但一个普遍的共识是 Web3 赋予了用户对其数据的所有权和自主权。这一转变在我们的生活和工作与数字化越来越深入地融合之际至关重要&#xff0c;这意味着所有人类活动很快将…

ESP8266连接巴法云

AT &#xff1a;测试是否能用 ATCWMODE1 :设置为无线终端模式 ATCWJAP"XXX","XXXXXXXXXX" :ESP8266加入热点网络&#xff0c;热点信息必须是2.4G ATCIPSTARTATCIPSTART"TCP","bemfa.com",8344 &…

Python解析网页-XPath

目录 1、什么是XPath 2、安装配置 3、XPath常用规则 4、快速入门 5、浏览器XPath工具 1.什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。 它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标…

SQL面试题练习 —— 连续支付订单合并

目录 1 题目2 建表语句3 题解 1 题目 现有一张用户支付表&#xff1a;t_user_pay 包含字段订单ID&#xff0c;用户ID&#xff0c;商户ID&#xff0c;支付时间&#xff0c;支付金额。 如果同一用户在同一商户存在多笔订单&#xff0c;且中间该用户没有其他商户的支付记录&#…

Python小游戏——打砖块

文章目录 打砖块游戏项目介绍及实现项目介绍环境配置代码设计思路代码设计详细过程 难点分析源代码代码效果 打砖块游戏项目介绍及实现 项目介绍 打砖块游戏是一款经典的街机游戏&#xff0c;通过控制挡板来反弹小球打碎屏幕上的砖块。该项目使用Python语言和Pygame库进行实现…

MVS net笔记和理解

文章目录 传统的方法有什么缺陷吗&#xff1f;MVSnet深度的预估 传统的方法有什么缺陷吗&#xff1f; 传统的mvs算法它对图像的光照要求相对较高&#xff0c;但是在实际中要保证照片的光照效果很好是很难的。所以传统算法对镜面反射&#xff0c;白墙这种的重建效果就比较差。 …

Vue 实例

一、页面效果图 二、代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><script src"../vue.js" type"text/javascript"></script><title>vue 实例</title></head><body>&l…

RAG中常用的索引(Index)方式

在RAG&#xff08;Retrieval-Augmented Generation&#xff09;中&#xff0c;索引是一个关键步骤&#xff0c;它涉及到将文档内容转换为机器可理解的形式&#xff0c;以便进行有效的检索和生成。以下是一些关于RAG中结构化索引的实现方法和步骤&#xff1a; 向量索引&#xf…

图解PHP MySQL:轻松掌握服务器端Web开发

在当今数字化时代&#xff0c;Web开发成为了一个炙手可热的领域&#xff0c;而PHP和MySQL作为Web开发领域的两大基石&#xff0c;其重要性不言而喻。对于初学者和寻求深化理解的开发者而言&#xff0c;一本好的教材就如同灯塔一般&#xff0c;指引着他们前行。《图解PHP & …

50etf期权购是什么意思?

今天带你了解50etf期权购是什么意思&#xff1f;很多刚刚接触50ETF期权的投资者或许不太明白50ETF期权投资是一种什么样的投资&#xff0c;对于50ETF期权投资来说&#xff0c;有认购合约与认沽合约&#xff0c;那么“购”也就是认购的意思。 50etf期权购是什么意思&#xff1f;…

嵌入式交叉编译:timezone/zoneinfo(指定安装路径)

下载 Time Zone Database tzdata2024a.tar.gz tzcode2024a.tar.gz 解压 注意&#xff0c;要解压到一个目录 tar xf tzcode2024a.tar.gz tar xf tzdata2024a.tar.gz 编译 这里直接指定了编译后安装路径&#xff0c;十分方便。 CROSS_NAMEaarch64-mix210-linuxexport P…

三. Stream API

1. 过滤 record Fruit(String cname, String name, String category, String color) { }Stream.of(new Fruit("草莓", "Strawberry", "浆果", "红色"),new Fruit("桑葚", "Mulberry", "浆果", "紫…

Nacos 2.x 系列【13】服务权重管理

文章目录 1. 概述2. 负载均衡器3. 配置权重4. 案例演示4.1 环境搭建4.2 默认权重4.3 权重值为零4.4 权重不一样 1. 概述 Nacos服务管理模块&#xff0c;提供了服务权重管理功能&#xff0c;用于给服务实例设置权重&#xff0c;权重越高&#xff0c;被分配的流量越大&#xff0…

Altium Designer软件下载安装「专业PCB设计软件」Altium Designer安装包获取!

Altium Designer&#xff0c;这款软件凭借其全面的设计流程覆盖&#xff0c;从概念到实现&#xff0c;都能为电子工程师提供强大的支持。 在硬件设计方面&#xff0c;Altium Designer提供了丰富的元件库和灵活的布局选项&#xff0c;使得工程师能够轻松地进行电路设计&#xff…

uniapp登录成功后跳回原有页面+无感刷新token

uniapp登录成功后跳回原有页面 引言 在C端的页面场景中&#xff0c;我们经常会有几种情况到登录页&#xff1a; 区分需要登录和不用登录的页面&#xff0c;点击需要登录才能查看的页面 已经登录但是超时&#xff0c;用户凭证失效等原因 以上情况可以细分为两种&#xff0c;一…

汽车4S店神秘顾客调查方案

本文由群狼调研&#xff08;长沙神秘顾客公司&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。汽车4S店神秘顾客调查方案包括以下步骤&#xff1a; 1.设定调查目标&#xff1a;明确调查的目的和期望结果&#xff0c;例如评估销售过程、售后服务质量或员工表现等方…

常见Windows命令汇总

1.打开命令提示符或PowerShell&#xff1a; cmd&#xff1a;打开命令提示符。 powershell&#xff1a;打开PowerShell。 2.文件和目录操作&#xff1a; cd&#xff1a;更改当前目录。例如&#xff0c;cd C:\Users\Username\Documents 将当前目录更改为 "Documents" …

单片机/嵌入式小白教程—硬件(三)51单片机最小系统

目录 简介 51单片机器件原理图 复位电路 供电电路 晶振电路 下载电路 最小系统原理图 更加方便的51单片机 简介 传统51单片机最小系统包含&#xff1a;复位电路、供电电路、晶振电路、下载电路 51单片机器件原理图 其中&#xff0c; 第9脚&#xff08;RST&#xff09;…