四种排序(选择排序、冒泡排序、快速排序和插入排序)

news2024/11/25 10:40:34

四种排序(选择排序、冒泡排序、快速排序和插入排序)

  • 选择排序:
    • 完整代码:
    • 运行结果:
  • 冒泡排序:
    • 完整代码:
    • 运行结果:
  • 插入排序:
    • 完整代码:
    • 运行结果:
  • 快速排序
    • 代码
    • 运行结果

平常我们一般都用选择排序、冒泡排序、快速排序和插入排序,今天我们就来讲讲吧!

选择排序:

思路:假设最大值的下标是0,然后与后面进行比较找出未排序的最大值下标,判断是否为没比较好的最后一位,不是,就与没比较好的最后一位交换

for(i=1;i<n;i++)
{
    ma=0;//假设最大值的下标是0
    for(j=1;j<=n-i;j++)//找出未排序的最大值下标
    {
        if(a[j]>a[ma])
        {
            ma=j;
        }
    }
    if(ma!=n-i)
    {
    swap(a[n-i],a[ma]);//是否为没比较好的最后一位,不是,就与没比较好的最后一位交换
    }
}

完整代码:

//选择排序
#include<bits/stdc++.h>
using namespace std;
int main() {
	int i,j,n,ma=0,a[105];
	cin>>n;
	for(i=0; i<n; i++) {
		cin>>a[i];
	}
	for(i=1; i<n; i++) {
		ma=0;
		for(j=1; j<=n-i; j++) {
			if(a[j]>a[ma]) {
				ma=j;
			}
		}
		if(ma!=n-i) {
			swap(a[n-i],a[ma]);
		}
	}
	for(int i=0; i<n; i++) {
		cout<<a[i]<<" ";
	}
	return 0;
}

运行结果:

在这里插入图片描述

冒泡排序:

思路:每个数与后面的那个数比较,直到没排过序的最后那一个(n-i,i轮数)

for(i=1; i<=n-1; i++) {//i控制轮数
		for(j=0; j<=n-1-i; j++) {//将每一次比较以后的最大值后移一位
			if(c[j]>c[j+1]) {
				swap(c[j],c[j+1]);
			}
		}
	}

完整代码:

//冒泡排序
#include<bits/stdc++.h>
using namespace std;
int n,j,i;
int c[1110];
int main() {
	cin>>n;
	for(i=0; i<n; i++) {
		cin>>c[i];
	}
	for(i=1; i<=n-1; i++) {
		for(j=0; j<=n-1-i; j++) {
			if(c[j]>c[j+1]) {
				swap(c[j],c[j+1]);
			}
		}
	}
	for(i=0; i<n; i++) {
		cout<<c[i]<<" ";
	}
	return 0;
}

运行结果:

在这里插入图片描述

插入排序:

思路:先找出合适的位置,在将数组往后放,将找到合适的位置数据放到第一个

for(i=1; i<n; i++) 
	{
		for(j=0; j<i; j++) 
		{
			if(a[i]<=a[j]) break;//找合适的位置
		}
		if(j!=i) 
		{
			t1=a[i];
			for(k=i-1; k>=j; k--) 
			{
				a[k+1]=a[k];
			}
			a[j]=t1;//插入
		}
	}

完整代码:

//插入排序
#include<bits/stdc++.h>
using namespace std;
int main() {
	int i,j,n,l,k;
	double a[105],t1;
	cin>>n;
	for(i=0; i<n; i++) {
		cin>>a[i];
	}
	for(i=1; i<n; i++) 
	{
		for(j=0; j<i; j++) 
		{
			if(a[i]<=a[j]) break;
		}
		if(j!=i) 
		{
			t1=a[i];
			for(k=i-1; k>=j; k--) 
			{
				a[k+1]=a[k];
			}
			a[j]=t1;
		}
	}
	for(i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
	return 0;
}

运行结果:

在这里插入图片描述

快速排序

我们画图来讲一讲吧!
1.随意列出10个无序的数字,需要用到i,j两个变量,i在这列数的最左边,j在这列数的最右边,在这列数中将一个数设置基准值(大家可以不设第一个数为基准值),首先让j向左移动,让i向右移动。
在这里插入图片描述

2.j找到一个比基准值小的数2停下来,然后i向右移动找到比基准值大的数6停下来,然后将i,j所指向的数进行交换。
3.交换后,j继续向左移动找到比基准值小的数4停下来,然后i向右移动找到比基准值大的数7停下来,然后将i,j所指向的数进行交换。
4.接下来j继续向左移动找到比基准值小的数3,i向右移动和j碰面,此时i和j在同一个位置上停下来,此时将i和j所指向的数和基准值进行交换,即将3和5进行交换。
5.即基准值归位后,基准值左边的都是小于基准值5的数,在基准值右边的都是大于基准值5的数。
(以此类推)

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[100],i,j;
void qp(int l,int r) {
	i=l;
	j=r;
	if(l>=r)return ;
	while(i!=j) {
		while(a[j]>=a[l]&&i<j)j--;
		while(a[i]<=a[l]&&i<j)i++;
		if(i<j)swap(a[i],a[j]);
	}
	swap(a[l],a[i]);
	qp(l,i-1);
	qp(i+1,r);
}
int main() {
	cin>>n;
	for(int i=0; i<n; i++)cin>>a[i];
	qp(0,n-1);
	for(int i=0; i<n; i++)cout<<a[i]<<' ';
	return 0;
}

运行结果

在这里插入图片描述

(完整代码适用于1010- 数组元素的排序)

再见,记得三连哦!

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

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

相关文章

linux 环境异常登录的甄别方法

1、关于linux的登录记录 查看最近登录IP和历史命令执行日期 last 显示的最末尾的 使用last -10 看最新的 登录IP地址 时间 still仍在登录 选项&#xff1a; &#xff08;1&#xff09;-x&#xff1a;显示系统开关机以及执行等级信息 &#xff08;2&#xff09;-a&am…

SpringSecurity[3]-自定义登录逻辑,自定义登录页面,以及认证过程的其他配置

前一篇:SpringSecurity[2]-UserDetailsService详解以及PasswordEncoder密码解析器详解 链接:SpringSecurity[2]-UserDetailsService详解以及PasswordEncoder密码解析器详解_豆虫儿的博客-CSDN博客 五、自定义登录逻辑 当进行自定义登录逻辑时需要用到之前讲解的UserDetailsS…

Java泛型的作用以及如何使用(继承、接口、方法、通配符) 附源码

&#x1f34b;1. 泛型的定义 class 类名称<泛型标识, 泛型标识, ....>{private 泛型标识 变量名称;....... } 常用的泛型标识字符 :T, E, K, V E - Element (在集合中使用&#xff0c;由于集合中存放的是元素)&#xff0c;E是对各方法中的泛型类型进行限制&#xff0c;…

【微服务技术06】Nacos注册中心

【微服务技术06】Nacos注册中心 案例代码&#xff1a;https://gitee.com/pikachu2333/spring-cloud-hexuan 安装Nacos 安装nacos&#xff1a;https://github.com/alibaba/nacos/releases 单机启动&#xff1a;sh startup.sh -m standalone 访问&#xff1a;http://127.0.0.1…

操作系统,计算机网络,数据库刷题笔记10

操作系统&#xff0c;计算机网络&#xff0c;数据库刷题笔记10 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xf…

yolov5修改骨干网络-使用pytorch自带的网络-以Mobilenet和efficientnet为例

通过 yolov5修改骨干网络–原网络说明 我们知道&#xff1a;yolov5.yaml中存放的是我们模型构建参数&#xff0c;具体构建过程在yolo.py中的parse_model函数&#xff0c;通过循环遍历yolov5.yaml给的参数&#xff0c;去寻找网络名称&#xff0c;并将args的参数传入网络&#xf…

获取bean的三种方式和注意事项

获取bean的三种方式和注意事项 spring-ioc.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…

PUMA:DOA估计模式的改进实现(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

北京旅游HTML学生网页设计作品 dreamweaver作业静态HTML网页设计模板 北京旅游景点网页作业制作 HTML+CSS+JS

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

口诀速记 DataFrame 指定行列的数据

口诀速记DataFrame 指定行列的数据一、loc函数和iloc函数获取指定行列的数据二、loc和iloc的切片操作三、[] 语法获取指定行列的数据✅作者简介&#xff1a;大家好我是爱康代码 &#x1f4c3;个人主页&#xff1a;链接: 点一下这里就进入爱康代码的主页链接&#xff0c;欢迎参观…

深入:9种设计模式在Mybatis中的运用

虽然我们都知道有26个设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;Mybatis源码中使用了大量的设计模式&#xff0c;阅读源码并观察设计模式在其中的应用&#xff0c;能够更深入的理解设计模式。 Mybatis至少遇到了以下的设计模式的…

接口优化技巧

1. 批量思想&#xff1a;批量操作数据库 优化前&#xff1a; //for循环单笔入库 for(TransDetail detail:transDetailList){insert(detail); }优化后&#xff1a; batchInsert(transDetailList);打个比喻&#xff1a; 打个比喻:假如你需要搬一万块砖到楼顶,你有一个电梯,电…

怎么进行多人配音?建议收藏这些方法

相信不少小伙伴平时在网上冲浪的时候&#xff0c;经常会刷到一些搞笑视频吧。这些搞笑视频的配音&#xff0c;通常都是以一人分饰多角或者是多人互动对话的形式进行配音的。那有没有小伙伴有着不错的搞笑创意点子&#xff0c;但是苦于没有人配音呢&#xff1f;其实我们可以使用…

电脑之间通信的大致过程

本文来自对网络工程师之路内容的个人总结&#xff0c;仅供个人复习参考。 1.电脑之间通信就需要有线路&#xff0c;但是如果多台电脑互相之间需要通信&#xff0c;那么就需要有很多根线&#xff0c;每台电脑需要有多网卡&#xff0c;为了解决这个问题&#xff0c;(集线器)Hub就…

360度内环镜、内螺纹检测镜头、瓶盖检测镜头以及超中心镜头

用于孔洞状物体的360内部成像 提示&#xff1a; 内孔检测光学镜头 从外部检查腔内&#xff1b;无需在孔洞内放置光学探头&#xff1b;带孔对象的360度对焦&#xff1b;腔体内壁和底部都可以实现高分辨率成像&#xff1b;景深可使同一个镜头拍摄具有不同形状和尺寸的物体&…

Bidirectional Recurrent Neural Networks

摘要 a regular recurrent neural network &#xff08;RNN&#xff09; →\rightarrow→ a bidirectional recurrent neural network (BRNN)a preset future frame&#xff1a; 预设的未来架构。. Structure and training procedure&#xff1a; 架构和训练程序。TIMIT datab…

Java多线程之:详解ThreadPoolExecutor执行源码分析

文章目录线程池的实现原理详解ThreadPoolExecutor核心数据结构核心配置参数解释线程池的优雅关闭线程池的生命周期正确关闭线程池的步骤shutdown()与shutdownNow()的区别任务的提交过程分析任务的执行过程分析shutdown()与任务执行过程综合分析shutdownNow() 与任务执行过程综合…

【大一大二必看】计算机专业的同学应该参加哪些比赛?

文章目录1. 前言2. ICPC3. CCPC4. 蓝桥杯5. 天梯赛6. CCF CSP7. PAT8. 全国高校计算机能力挑战赛9. 其他&#x1f351; 天池大赛&#x1f351; 华为软件精英挑战赛&#x1f351; LeetCode 周赛 / 双周赛&#x1f351; CSDN 编程竞赛总结1. 前言 2022 年已经过半&#xff0c;对…

java版商城 b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买…

巡检过程中有哪些注意事项?智能巡检了解一下

智能巡检系统是现场过程管理的生产力革命&#xff0c;由人工记录蝶化为掌上电脑运作&#xff0c;适用于设备运行值班记录、仓库/资产管理、设备巡检保养、安全巡更、机房值守、基站维护等一切重复性的工作管理。 安全巡检的目的在于识别信息系统存在的安全脆弱性、分析信息系统…