码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据结构--排序】冒泡排序,选择排序,插入排序


    在这里插入图片描述

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
    📃个人主页 :阿然成长日记 👈点击可跳转
    📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
    🚩 不能则学,不知则问,耻于问人,决无长进
    🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

    文章目录

    • 一、冒泡排序
      • 1.原理:
      • 2.流程图:
      • 3.代码:
      • 4.测试结果:
      • 5.时间复杂度
    • 二、选择排序
      • 1.原理:
      • 2.流程图:
      • 3.代码:
      • 4.测试结果:
      • 5.时间复杂度
    • 三、直接插入排序
      • 1.原理:
      • 2.流程图:
      • 3.代码:
      • 4.测试结果:
      • 5.时间复杂度

    在这里插入图片描述

    一、冒泡排序

    1.原理:

    🔸每次从a]0]开始,从左到右,相邻元素依次进行比较。
    🔸每比较完一轮,序列中最大的一个或最小的一个就被换到了数组最后的位置,数组下标-1。
    🔸继续从头开始下一轮。

    2.流程图:

    在这里插入图片描述

    3.代码:

    //冒泡排序
    int* BubbleSort(int* a, int n)
    {
    
    	for (int i = 0; i < n - 1; i++)
    	{
    		for (int j = 0; j < n - i - 1; j++)
    		{
    			if (a[j + 1] < a[j])
    			{
    				int tmp = a[j + 1];
    				a[j + 1] = a[j];
    				a[j] = tmp;
    			}
    		}
    	}
    	return a;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.测试结果:

    在这里插入图片描述

    5.时间复杂度

    O(N^2)

    二、选择排序

    1.原理:

    🔸 第一次选择a[0]元素,开始向后遍历同时找最大值,和最小值,最大值放到末尾,最小值放到开头。
    🔸第二次选择a[1]元素,开始向后遍历同时找最大值,和最小值,最大值放到末尾,最小值放到开头,直到到end-1位置。
    🔸重复上述操作
    注意:如果max在beain位置,会造成排序错误,只需max = min即可;

    2.流程图:

    此流程图是在遍历时只找最小值的方法;
    而我们选择优化这个排序,通过在遍历时同时寻找最大值和最小值,来提升排序效率。
    在这里插入图片描述

    3.代码:

    //选择排序
    void SlectSort(int* a, int n)
    {
    	int begin = 0;
    	int end = n - 1;
    	while(begin<end)
    	{
    		int max = begin;
    		int min = begin;
    		for (int i = begin+1; i <= end; i++)
    		{
    			if (a[min] > a[i])
    			{
    				min = i;
    			}
    			if (a[max] < a[i])
    			{
    				max = i;
    			}
    		} 
    		//先交换最小值到左边,
    		Swap(&a[begin], &a[min]);
    		//特殊情况。如果max在beain位置,会造成排序错误
    		if (begin == max)
    		{
    			max = min;
    		}
    		//在交换最大值到右边
    		Swap(&a[end], &a[max]);
    		begin++;
    		end--;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    4.测试结果:

    在这里插入图片描述

    5.时间复杂度

    O(N^2)

    三、直接插入排序

    1.原理:

    🔹>内循环:每次取end+1下标位置值保存到tmp中,从end下标处向前作比较,如果比他小,就将该元素后移,如果大于或等于就停止,并将tmp值赋值给end+1位置,直到end小于0位置,
    🔹>外循环:end++

    2.流程图:

    在这里插入图片描述

    3.代码:

    //直接插入排序
    int* InsetSort(int* a, int n)
    {
    	for (int i = 0; i < n - 1; i++)
    	{
    		int end = i;
    		int tmp = a[end + 1];
    		while (end >= 0)
    		{
    			if (tmp < a[end])
    			{
    				a[end + 1] = a[end];
    			}
    			else
    			{
    				break;
    			}
    			end--;
    		}
    		a[end + 1] = tmp;
    	}
    	return a;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4.测试结果:

    在这里插入图片描述

    5.时间复杂度

    O(N^2)

  • 相关阅读:
    360度无死角刨析C++STL中list的使用和实现,list与vector的对比
    #Day Day Plan# 《NCB_PCI_Express_Base 5.0.1.0》pdf 译文笔记
    文件分片上传和断点续传
    Swift Combine 使用 handleEvents 操作符调试管道 从入门到精通二十五
    软件测试/测试开发丨学会与 AI 对话,高效提升学习效率
    β-环糊精衍生物接枝羟丙基壳聚糖水凝胶/羧基改性壳聚糖固载环糊精水凝胶微球的制备
    1.4.25 实验25:华为高级ACL
    Linux 开源数据库Mysql-10-mysql集群一主一从GTID
    Android下怎么使用LDD查看依赖库
    table的宽高适配方法
  • 原文地址:https://blog.csdn.net/luhaoran814/article/details/133177421
  • 最新文章
  • [深度学习] 大模型学习8下-高性能推理引擎vLLM学习笔记
    《给阿嬷的情书》中的“嬷”,与AI概念中的Token、Prompt、上下文窗口
    [Full Clock 技术复盘] 一、浏览器前端如何实现百毫秒级时间校准?时间 API 推荐、模拟 NTP 算法原理及局限
    一文讲透企业级 Harness Coding 架构落地实战!
    Claude Code 有了 Dynamic Workflows,那其他大模型怎么办?有开源版的替代-OpenWorkflows
    【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (5)--- 异步处理
    深度学习进阶(二十六)现代 LLM 的核心架构设计其一:RMSNorm
    "TokenFormer: Unify the Multi-Field and Sequential Recommendation Worlds" 论文笔记
    论文复现【DualMap: Online Open-Vocabulary Semantic Mapping for Natural Language Navigation in Dynamic Changing Scenes】
    张高兴的 Hailo-10 开发指南:(一)实现离线语音识别
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号