排序
李柒岁
这个作者很懒,什么都没留下…
展开
-
【leetcode】148.链表归并排序C语言实现O(n log n) 时间复杂度和常数级空间复杂度
题目出处题目要求:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。以下评论来自leetcode @Allen个人感觉受益匪浅,本文在此思路上用C语言实现了对链表的归并排序,并对一些细节做出了补充说明。bottom-to-up 的归并思路是这样的:先两个两个的 merge,完成一趟后,再 4 个4个的 merge,直到结束。举个简单的例子:[4,3,1,7,8,9,2,11,5,6].step=1: (3->4)->(1->7)->(8->9原创 2020-09-19 16:24:16 · 387 阅读 · 0 评论 -
【leetcode】AddressSanitizer: heap-buffer-overflow on address所引出的问题思考[1528.重新排列字符串]
最近在leetcode上写题,当写到第1528题时突然出现也就是堆内存溢出heap-buffer-overflow on address可是在自己的vscode上却没有一点问题。1528. 重新排列字符串题目给你一个字符串 s 和一个 长度相同 的整数数组 indices 。请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。返回重新排列后的字符串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/s原创 2020-08-04 10:25:48 · 587 阅读 · 0 评论 -
【排序】经典排序算法动画详解----选择排序C语言实现
选择排序基本思想:1.第一次从全部数据元素扫描中选出最小(或最大)的一个元素,存放在序列的起始位置(第一个位置),2.再从第二个的元素开始向后扫描寻找到最小(大)元素,然后放到已排序的序列的第二个位置。 以此类推,直到全部待排序的数据元素的个数为零。图解:操作方法:1.假设第一个位置的元素是最小的设为min,for循环向后扫描一旦发现比min小的元素则把min的值换成比它小的元素值,并记下最小元素的值与坐标。2.一趟循环结束,交换第一个位置元素的值和序列中最小值元素所在位置的值。#incl原创 2020-07-13 10:25:31 · 285 阅读 · 0 评论 -
【排序】经典排序算法动画详解----希尔排序C语言实现
希尔排序希尔排序(Shellsort),也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位基本思想:希尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行插入排序。排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入原创 2020-07-13 09:57:02 · 589 阅读 · 0 评论 -
【排序】经典排序算法动画详解——冒泡排序C语言实现
系列文章插入排序堆排序冒泡排序基本思想:冒泡排序算法的运作如下:1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。最后一个元素已经有序。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。(重复以上步骤时每次都比上一次少重复一遍,因为每次交换都不需要比较最后一个元素)注:对于第四步中“直到没有任何一对数字需要比较原创 2020-07-12 22:25:21 · 1260 阅读 · 0 评论 -
【排序】经典排序算法动画详解----插入排序C语言实现
插入排序基本思想:每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置。一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:⒈ 从第一个元素开始,该元素可以认为已经被排序(先假定第一个待排序元素已排好序)⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置⒋ 重复步骤3,直到...原创 2020-03-15 17:46:32 · 467 阅读 · 0 评论 -
【排序】经典排序算法动画详解——堆排序C语言实现
堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。动画详解平均复杂度O(nlog n + n) =O所谓堆排序就是每次取堆的根结点为最大值,然后将最后一个节点作为根节点,进行堆调整,堆排序的时间等于建堆和进行堆调整的时间,所以堆排序的时间复杂度是O(nlog ...原创 2020-03-29 21:04:30 · 423 阅读 · 0 评论