【数据结构与算法】插入排序、希尔排序

devtools/2024/10/22 7:26:56/

记录自己所学,无详细讲解

1.插入排序

从第二个元素开始, 第二个元素前面的元素看作一个数组,然后从右到左依次比较

如果第二个元素大于前面第一个元素则不变,因为升序,大于他则代表位置不用变动

如果第二个元素小于前面第一个元素,则保存第二个元素值进tmp变量里,然后再比较第一个元素前面的,因为是第一个元素 所以没有元素可比较了,所以最后将tmp值赋给此时的比较位置

#include <stdio.h>
void Insertsort(int a[])
{int i = 0;for (int i = 0; i < 9;i++){int end = i;int tmp = a[end + 1];while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];end--;                                         }else{break;}}a[end+1] = tmp;}}
void Print(int a[])
{for (int i = 0; i < 10; i++){printf("%3d", a[i]);}
}
int main()
{int a[10] = { 3, 4, 6, 1, 7, 9, 2, 5, 8, 10 };Insertsort(a);Print(a);return 0;
}

2.希尔排序

插入排序的优化版(只是多了一层循环,添加了一个gap变量,更改了几个变量值)

在正式插入排序前先进行了几次小的插入排序,将数组先大概的排个序,大概排完序再正式排

通过gap来作为分割距离,将数组分成多组来进行插入排序,最后gap=1是表示不用分组了,则代表正式插入排序了

希尔排序时间复杂度是n的1.3次方 而直接正式插入排序的话时间复杂度是n的2次方,数据越多差距越明显

#include <stdio.h>
void Shellsort(int a[])
{int gap =10;while (gap>1){gap = gap / 2;for (int i = 0; i < 10-gap; i++){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end = end - gap;}else{break;}}a[end + gap] = tmp;}}
}
void Print(int a[])
{for (int i = 0; i < 10; i++){printf("%3d", a[i]);}
}
int main()
{int a[10] = { 3, 4, 6, 1, 7, 9, 2, 5, 8, 10 };Shellsort(a);Print(a);return 0;
}


http://www.ppmy.cn/devtools/127769.html

相关文章

智能汽车制造:海康NVR管理平台/工具EasyNVR多品牌NVR管理工具/设备实现无插件视频监控直播方案

一、背景介绍 近年来&#xff0c;随着网络在我国的普及和深化发展&#xff0c;企业的信息化建设不断深入&#xff0c;各行各业都加快了信息网络平台的建设&#xff0c;大多数单位已经或者正在铺设企业内部的计算机局域网。与此同时&#xff0c;网络也成为先进的新兴应用提供了…

在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例

在使用 RabbitMQ 作为消息代理时&#xff0c;多个 Celery 实例&#xff08;或应用&#xff09;可以共享同一个 RabbitMQ 实例。这样做可以简化基础设施管理&#xff0c;同时允许不同的 Celery 应用之间进行消息传递和协作。下面是如何配置多个 Celery 实例以使用同一个 RabbitM…

AWS账号与邮箱的关系解析

在当今数字化时代&#xff0c;云计算服务的普及使得越来越多的企业和个人用户开始使用亚马逊网络服务&#xff08;AWS&#xff09;。作为全球领先的云服务平台&#xff0c;AWS为用户提供了丰富的计算、存储和数据库服务。然而&#xff0c;对于许多新用户来说&#xff0c;关于AW…

多线程-读写锁的一些理解

分配在不同的核心上&#xff1a;如果主线程和子线程被操作系统的调度器分配到不同的处理器核心上&#xff0c;它们可以真正地同时运行。这是因为每个核心可以独立执行代码&#xff0c;所以两个线程可以并行执行&#xff0c;而不是交替执行。 分配在同一核心上&#xff1a;如果…

003_django基于Django高校岗位招聘平台与数据可视化分析设计和实现2024_414pr4jc

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

基于深度学习的进化神经网络设计

基于深度学习的进化神经网络设计&#xff08;Evolutionary Neural Networks, ENNs&#xff09;结合了进化算法&#xff08;EA&#xff09;和神经网络&#xff08;NN&#xff09;的优点&#xff0c;用于自动化神经网络架构的设计和优化。通过模拟自然进化的选择、变异、交叉等过…

​微信小程序 页面间传递数据

在小程序中&#xff0c;给页面传递参数通常有以下几种方法&#xff1a; 通过URL传递参数&#xff1a; 在小程序中&#xff0c;可以在页面的路径后面添加参数&#xff0c;然后在页面的 onLoad 函数中获取这些参数。 // 在app.json中配置页面路径 "pages": [{"pat…

Flutter升级到3.24.0后web项目空白显示

前言 我将Flutter版本从3.19.3升级到3.24.0后我启动了以前可以运行的Flutter Web程序&#xff0c;结果页面空白并在控制台出现如下错误 Warning: In index.html:38: Local variable for "serviceWorkerVersion" is deprecated. Use "{{flutter_service_worker…