码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 插入排序和希尔排序


    目录

    • 1.直接插入排序
    • 2.希尔排序

    1.直接插入排序

    基本思想:
    把待排序的数据按其大小逐个插入到一个已经排好序的有序序列中,直到所有的数据插入完成为止。

    当插入第i个元素时,前面的a[0],a[1],...,a[i-1]个数据已经排好序了,此时用a[i]与a[i-1],a[i-2],...进行比较,找到插入位置就将a[i]插入,原来位置上的元素顺序后移

    在这里插入图片描述

    void InsertSort(int* a, int n)
    {
    	for (int i = 0; i < n-1; i++)
    	{
    		int end = i;//记录已经有序的数据的最后一个数据的下标
    		int tmp = a[end + 1];
    		while (end >= 0)
    		{
    			if (a[end] > tmp)
    			{
    				a[end + 1] = a[end];
    				end--;
    			}
    			else//a[end]
    			{
    				break;
    			}
    		}
    		a[end + 1] = tmp;
    	}
    }
    

    在这里插入图片描述

    元素集合月接近有序,直接插入排序算法的时间效率更高
    时间复杂度:O(N^2)
    稳定性:稳定

    2.希尔排序

    希尔排序是直接插入排序的优化

    1.预排序
    2.直接插入排序
    基本思想:
    先选定一个整数,把待排序文件中所有数据分成gap个组,所有距离为gap的数据分在同一个组里,并对每一组的数据进行排序。然后,取gap=gap/3+1,重复上述分组的操作。当gap=1时,所有数据在同一组的已经排好序了

    void ShellSort(int* a, int n)
    {
    		int gap = n;
    		while(gap > 1)
    		{
    			//+1保证最后一个gap一定是1
    			//gap》1是预排序
    			//gap==1是插入排序
    			gap = gap / 3 + 1;
    			for (int i = 0; i < n - gap; i++)
    			{
    				int end = i;
    				int tmp = a[end + gap];
    				while (end >= 0)
    				{
    					if (a[end] > tmp)
    					{
    						a[end + gap] = a[end];
    						end -= gap;
    					}
    					else
    					{
    						break;
    					}
    				}
    				a[end + gap] = tmp;
    			}
    		}
    }
    
    

    在这里插入图片描述
    在这里插入图片描述

    当gap>1时都是预排序,目的是让数组更接近有序。当gap==1时,数组已经接近有序了,这样就会很快
    时间复杂度:O(N^1.3)(ps:时间复杂度是不固定的)
    稳定性:不稳定

  • 相关阅读:
    读书笔记:彼得·德鲁克《认识管理》第19章 社会影响和社会问题
    jQuery中mouseenter&mouserleave替代mouseover&mouseout
    2022 年广西职业院校技能大赛高职组《云计算》赛项赛卷
    sqllab第二关通关笔记
    k8s-部署rancher-页面化管理
    Python FastApi 解决跨域及OPTIONS预请求处理
    Android 12(S) 图像显示系统 -
    Codeforces Round #834 (Div. 3) A-G
    【数据挖掘 & 机器学习 | 时间序列】时间序列必学模型: ARIMA超详细讲解
    全网最详细教程(上):教你如何从0-1制作出一张可视化大屏
  • 原文地址:https://blog.csdn.net/Tangcan2/article/details/139359318
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号