数据结构与算法
云日松
云日明松雪,溪山进晚风
展开
-
排序算法-堆排序(含C语言代码示例)
堆排序是一种基于二叉堆数据结构的排序算法。首先,构建最大堆(或最小堆),将待排序的数组视作一个完全二叉树,通过从最后一个非叶子节点开始向上调整,使得每个父节点的值都大于等于(最大堆)或小于等于(最小堆)其子节点的值。这步骤确保了最大(或最小)值位于堆的根节点。然后,将堆顶元素(最大值或最小值)与数组的最后一个元素交换位置,并将堆的大小减一。接着,对新的堆顶进行堆调整,使得剩余元素重新满足堆的性质。重复以上步骤,直到堆的大小减至1,即完成排序。原创 2024-01-14 17:03:04 · 448 阅读 · 0 评论 -
排序算法-归并排序(含C语言代码示例)
归并排序是一种基于分治思想的经典排序算法,其主要思想是将待排序的数组分割成两个子数组,分别对这两个子数组进行递归排序,然后将排好序的子数组合并起来得到最终有序数组。整个归并排序的过程可以分为三个步骤:分割、排序和合并。首先,在分割步骤中,算法将待排序数组递归地分成两半,直到每个子数组的长度为1或0。这一步骤确保了每个子数组都是有序的。其次,在排序步骤中,对每一对有序的子数组进行合并排序。这里使用了一个辅助数组来存储排序后的元素,然后将结果复制回原始数组。原创 2024-01-14 15:36:37 · 543 阅读 · 0 评论 -
排序算法-希尔排序(含C语言代码示例)
希尔排序是一种基于插入排序的高效、不稳定的排序算法,它通过对待排序序列进行一系列间隔划分的子序列排序来改进插入排序的性能。该算法的基本思想是先将整个序列分割成若干个子序列,然后分别对各个子序列进行插入排序。这一过程通过逐渐减小子序列的间隔,最终达到整个序列基本有序的状态。希尔排序之所以比插入排序更快,是因为在初始阶段,序列的局部顺序已经得到改善,这有助于减少后续插入排序的比较和交换次数。原创 2024-01-14 10:20:34 · 512 阅读 · 0 评论 -
排序算法-快速排序(含C语言代码示例)
快速排序(QuickSort)是一种常用的高效排序算法,由Tony Hoare在1960年提出。它采用分治法(Divide and Conquer)策略,通过将原始数组分成较小的子数组来解决排序问题。原创 2024-01-13 21:39:50 · 508 阅读 · 0 评论 -
排序算法-冒泡排序(含C语言代码示例)
冒泡排序是一种简单的排序算法,其核心思想是重复地遍历待排序列表,比较并交换相邻元素,使得较大的元素逐渐“冒泡”到列表的末尾,而较小的元素则逐渐上浮至列表的前端。该算法的名字源于类比元素的移动过程,就像水泡逐渐上浮一样。冒泡排序的基本步骤包括比较相邻元素、交换元素、遍历整个列表、重复多轮直到排序完成。冒泡排序的历史可以追溯到1956年,由于其简单直观的思想,它早在计算机科学的早期就被提出并应用。尽管冒泡排序的时间复杂度为O(n^2),并不是最有效的排序算法,但它仍然在教学和理论研究中有着重要的地位。原创 2024-01-13 16:41:02 · 481 阅读 · 3 评论 -
经典递归算法—汉诺塔问题(含代码示例)
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。原创 2022-10-03 21:11:40 · 13948 阅读 · 1 评论 -
排序算法—插入排序(含C语言代码示例)
插入算法作为几大经典的排序算法之一,它的性能在其中算是比较不错的了(主要是稳定);插入算法的基本原理就是在一串乱序的数字中,首先认为第一个数是有序的,然后从第二个数开始比较,每次比较都与前面排好序的部分由后往前进行比较;比如第二个数和第一个数比较,然后第三个数和先和第二个数比较然后在和第一个数比较,第四个数先和第三个数比较然后再分别和第二、第一个数比较。如果在比较的过程中遇到的后一个数比自己大而前一个数比自己小那么就把自己插入到这两个数之间,然后结束这一轮排序进入下一轮;原创 2022-09-18 08:08:24 · 8755 阅读 · 6 评论