排序算法专栏
Currybeefer
理想是条不归路,不下战场才能赢
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【左神算法笔记】Class2,3 各种排序算法总结
快排3.0随机选择的一个数,与最尾巴数字交换,并以这个新的尾巴数字为基准做划分,这样就无法人为构建最差情况,这样时间复杂度就是O(nlogn)归并排序需要借助额外数组完成merge的过程所以空间复杂度为O(n),归并排序的时间复杂度是根据master公式计算的,为O(nlogn)归并排序的时间复杂度是基于master公式算出来的,空间复杂度为O(n),因为merge的时候需要借助额外数组完成。桶排序和之前说的排序不同,其是不是基于比较排序,时间复杂度是O(n),不受O(nlogn)下限的影响。.......原创 2022-07-27 02:24:37 · 569 阅读 · 0 评论 -
堆排序及代码详解
堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序的时间复杂度为nlogn,堆排序是一种不稳定的排序算法。 以下是堆排序的代码,思路都在注释里了,记得从下往上看。 如果还没有搞懂,点击这里进行参考 /// 大顶堆调整方法 void MaxHeapify(int arr[],int start, int end) { //start代表需要调整的节点 //end原创 2022-04-20 15:07:31 · 3359 阅读 · 0 评论 -
计数排序及代码实现
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序) 算法代码如下,原理都写在注释中了 参考文章 void CountSort(int array[],i原创 2022-01-15 02:04:05 · 401 阅读 · 0 评论 -
插入排序算法的讲解和实现
插入排序算法的讲解和实现 插入排序,时间复杂度为O(n),且是稳定的排序算法 动图演示: 在这里插入代码片 ``` //插入排序,时间复杂度为O(n),且是稳定的排序算法 static void InsertSort(int[] array) { //将数组分为两组,一组是已经排好序的(我们称为A组)另一组是还没有排好序的(称为B组) //在数组的刚开始,我们把数组的第一个元素array[0]将入A组,剩下的放入B组原创 2020-05-13 16:41:05 · 394 阅读 · 0 评论 -
简单选择排序算法解析
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕 **简单选择排序算法的时间复杂度是O(n),且是一种不稳定的算法 动图演示: 代码示例: /* * 选择排序(Selection-sort)是一种简单直观的排序算法。 * 它的工作原理:首先在未排序序列中原创 2020-05-13 17:39:54 · 581 阅读 · 0 评论 -
快速排序的代码及分析
先挖个坑,写的不是特别详细,有时间我再来接着写 /*快速排序的平均时间复杂度是O(nlogn),且它是一种不稳定的排序*/ /// <summary> /// 快速排序 /// </summary> /// <param name="array">要排序的数组</param> /// <param name="left">数组要排序部分的左端</param> /// <param n原创 2020-05-18 11:26:07 · 280 阅读 · 0 评论 -
冒泡排序算法详解和代码实现
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序的时间复杂度是o(n²),是一种稳定的排序算法 /*冒泡排序的时间复杂度是o(n²),是一种稳定的排序算法*/ static void BubbleSort(int[] array) {原创 2020-05-19 11:03:43 · 1418 阅读 · 0 评论 -
希尔排序算法代码详解(附插入排序代码)
1959年Shell发明,第一个突破O(n2)的排序算法,是直接插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 希尔排序的大致思路是把数组的元素按照一定的间隔进行逻辑分组,分组后针对每一组进行插入排序。并且渐渐减小间隔,随着间隔的缩小,整个数组就变得越来越有序。这个间隔叫做希尔增量。 希尔排序的时间复杂度难以测算,大概是O(n^(1.3—2))这么一个范围。希尔排序是一种不稳定的排序算法。 下面是希尔排序的代码演示,所有的注释都在代码里。 为了辅助理解原创 2020-07-08 18:42:40 · 4302 阅读 · 2 评论 -
归并排序的原理及代码详解
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 归并排序是一种稳定的排序算法,和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(nlogn)的时间复杂度。代价是需要额外的内存空间。 /// <summary> /原创 2020-07-14 09:10:58 · 991 阅读 · 0 评论
分享