当前位置: 首页 > news >正文

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

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

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.mrgr.cn/news/53195.html

相关文章:

  • Oracle T5-2 ILOM配置
  • 存在重复元素 II
  • HarmonyOS NEXT和认证(在校生的大福利)
  • Pycharm下载安装教程(详细步骤)+汉化设置教程
  • 基于SSM+微信小程序的电子点餐管理系统(点餐1)
  • 【YOLO学习】YOLOv5详解
  • 【第三版 系统集成项目管理工程师】第18章 职业道德规范
  • 力扣力扣力:一文搞定前序遍历的所有方法!
  • 使用kimi编辑助手,开始搭建一个微信小程序!第一天
  • Cisco软件基础使用
  • 原型链+instanceof+Vue底层原理
  • windows无法启动RemoteDesktopServices服务(位于本地计算机上)。错误126:找不到指定的模块
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.6——函数
  • 第Y3周:yolov5s.yaml文件解读
  • 【C++】string类(1)
  • 用statefulset部署redis集群-因podIP变化造成集群状态异常解决办法
  • 013_django基于大数据的高血压人群分析系统2024_dcb7986h_055
  • 第六节——从深层剖析qsort的使用(让你不再害怕指针)
  • Python字符串格式化方法format()
  • 项目打包不同环境