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

网站ui界面设计软件建筑工程有限公司电话

网站ui界面设计软件,建筑工程有限公司电话,小程序如何快速推广,苏州网站建设系统方案总体引入 在计算机科学的算法领域中,排序是一项基础且重要的操作。它旨在将一组无序的数据元素重新排列为有序序列,以满足特定的顺序要求,如升序或降序。常见的排序算法可分为不同类别,像插入排序,包含直接插入排序和…

 总体引入

在计算机科学的算法领域中,排序是一项基础且重要的操作。它旨在将一组无序的数据元素重新排列为有序序列,以满足特定的顺序要求,如升序或降序。常见的排序算法可分为不同类别,像插入排序,包含直接插入排序和希尔排序;选择排序,有直接选择排序和堆排序;交换排序,涵盖冒泡排序和快速排序;还有归并排序 。这些算法各有特点,适用于不同的应用场景,接下来让我们深入了解它们。

 

插入排序引入

想象你整理扑克牌时,会从一堆牌里一张一张拿出来,按顺序插到已经整理好的牌堆合适位置 。编程里的插入排序差不多也是这个道理。它把数据分成已排序和未排序两部分,从 未排序部分取元素,在已排序部分找到合适位置插入,不断重复,直到所有元素都排好序,就像把乱序的扑克牌整理成有序的一样。

一、直接插入排序(Insertion Sort)

算法思想
将数组分为“已排序”和“未排序”两部分,逐个将未排序部分的元素插入到已排序部分的正确位置。

代码解析

void InsertSort(int* arr, int n) {for (int i = 0; i < n - 1; i++) {  // 从第一个元素开始遍历到倒数第二个元素int end = i;                   // 已排序部分的末尾索引int tmp = arr[end + 1];        // 待插入元素(未排序部分的第一个元素)while (end >= 0) {             // 向前寻找插入位置if (arr[end] > tmp) {      // 若当前元素大于待插入元素,则后移arr[end + 1] = arr[end];end--;} else {                   // 找到合适位置,退出循环break;}}arr[end + 1] = tmp;            // 插入元素到正确位置}
}

步骤说明

  1. 外层循环:遍历每个待插入元素(从第二个元素开始)。

  2. 内层循环:从后向前比较,若当前元素比待插入元素大,则将其后移。

  3. 插入操作:找到第一个比待插入元素小的位置,将元素插入其后。

复杂度分析

  • 时间复杂度:

    • 最好情况(已有序):O(n),只需比较无需移动。

    • 最坏情况(逆序):O(n²),每次插入需移动全部已排序元素。

  • 空间复杂度:O(1),原地排序。

适用场景
数据量小或基本有序时效率高,稳定且简单。


二、希尔排序(Shell Sort)

算法思想
希尔排序是对直接插入排序的一种改进算法,它通过将待排序的数组按照一定的间隔(称为增量)进行分组,对每组分别进行直接插入排序,逐步缩小增量,当 gap > 1 时都是预排序,⽬的是让数组更接近于有序。当 gap == 1 时,数组已经接近有序的了,这样就会很快。这样整体⽽⾔,可以达到优化的效果。

代码解析

void ShellSort(int* arr, int n) {int gap = n;                       // 初始间隔设为数组长度while (gap > 1) {                  // 循环直到间隔为1(最后一次完整插入排序)gap = gap / 3 + 1;            // 动态调整间隔(常见增量方式)for (int i = 0; i < n - gap; i++) {  // 对所有间隔分组进行插入排序int end = i;               // 当前组的已排序末尾int tmp = arr[end + gap]; // 待插入元素while (end >= 0) {        // 组内插入排序if (arr[end] > tmp) {  arr[end + gap] = arr[end];end -= gap;        // 跨间隔移动} else {break;}}arr[end + gap] = tmp;      // 插入元素}}
}

步骤说明

  1. 动态调整间隔:初始间隔较大,逐步缩小(gap = gap/3 + 1)或者(gap = gap/2)

  2. 分组插入排序:对每个间隔形成的子序列进行插入排序。

  3. 最终排序:当间隔为1时,退化为标准插入排序,此时数组已基本有序。

复杂度分析

  • 时间复杂度:约 O(n^1.3),依赖增量序列的选择。

  • 空间复杂度:O(1),原地排序。

适用场景
中等规模数据,对稳定性无要求,优于直接插入排序。


测试案例
void test01() {int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};int size = sizeof(arr) / sizeof(arr[0]);// InsertSort(arr, size);ShellSort(arr, size);for (int i = 0; i < size; i++) {printf("%d ", arr[i]);  // 输出:0 1 2 3 4 5 6 7 8 9}
}

运行结果
无论调用哪个排序函数,最终输出均为有序数组 0 1 2 3 4 5 6 7 8 9


总结
  • 直接插入排序:简单稳定,适合小数据或部分有序场景。

  • 希尔排序:插入排序的高效改进,适合中等规模数据。

理解基础排序算法的实现有助于掌握更复杂的排序技术,实际应用中可根据数据特征选择合适的算法。

http://www.dtcms.com/wzjs/810952.html

相关文章:

  • 网站建设实训心得 总结网站keywords标签怎么写
  • 创建网站销售产品成都网站建设 公司
  • jsp网站seo优化国外网站建设费用
  • 阿里云 建网站wordpress换域名和空间
  • 建筑培训网站安陆市城乡建设局网站
  • 宫免费网站四川网站开发
  • 旅业认证二维码有什么用兰州企业网站排名优化
  • 上海公司注册一站式企业服务寻甸马铃薯建设网站
  • 南皮 网站网站开发基础
  • 手机移动端网站做多大wordpress企业主题破解版
  • 做网站域名有什么用百度账号管理
  • 做网站的变成语言哪类最简单谷歌云 wordpress 建站
  • php网站好做seowordpress 4.0-4.6
  • 网站设计是用ps做图吗重庆企业网站推广方案
  • 沧州网站运营公司做钓鱼网站原理
  • 部队内网网站建设方案dedecms怎么做网站
  • 网站开发包括几个部分做那种事免费网站
  • 厚街做网站价格做网站怎么挣钱最快
  • 综合性电子商务网站有哪些哪个网站学做凉皮
  • 威联通如何做网站如何用wordpress做企业
  • 大连白云小学网站建设专业旅游网站建设
  • 网站项目整体思路成都网站制作网站
  • 淄博网站优化价格网站怎么做飘窗
  • wordpress主题 googleseo加wordpress工程师
  • 南宁网站建设搭建电商网站建设精英
  • 正规营销型网站建设直播app在线看片有哪些
  • 做翻译网站 知乎东莞阳光网官网手机版
  • 永泰建设工程网站个人网站怎么做百度推广
  • php做的卖水果网站有哪些电商是啥意思是做什么的
  • 毕业设计php做网站十大保洁公司