码农知识堂 - 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)

  • 相关阅读:
    2022/09/03 day03:搭建私有git服务器与IDEA中使用Git
    谈谈 Kubernetes Operator
    【漏洞复现】某 NVR 视频存储管理设备远程命令执行
    【蜂鸟E203的FPGA验证】Chap.7 Vivado综合与性能分析-建立Vivado工程
    python 集合
    面试题亲身经历
    java代码审计-文件操作
    可视化概述
    Elastic Stack--01--简介、安装
    SQL中的case then的使用(select、update、insert、delete中各自使用)
  • 原文地址:https://blog.csdn.net/luhaoran814/article/details/133177421
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号