排序算法
一只努力的cs小白
这个作者很懒,什么都没留下…
展开
-
十大排序之基数排序(C语言实现)(数据结构)
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。基数排序是一种非比较排序算法,时间复杂度是 O(n) 。它的主要思路是,1. 将所有待排序整数(注意,必须是非负整数)原创 2020-06-07 22:12:42 · 1176 阅读 · 0 评论 -
十大排序之桶排序(数据结构)(排序算法)(C语言实现)
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。...原创 2020-06-06 17:12:49 · 628 阅读 · 0 评论 -
十大排序之计数排序(数据结构)(C语言实现)
计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlo原创 2020-06-02 21:11:38 · 1100 阅读 · 0 评论 -
十大排序之快速排序(C语言实现)(数据结构)
快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度是O(n)算法实现我们首先需要确立一个主元,这个主元需要我们来选择,然后比这个主元小的数分为一堆,比主元大的数分为一堆,然后递归分,排序。其中pivot是数组选出来的一原创 2020-05-31 19:58:57 · 530 阅读 · 0 评论 -
十大排序之归并排序(C语言实现)(排序算法)(递归和非递归)
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。时间复杂度O(n log n)空间复杂度T(n)首先归并排序分为递归和非递归两种方式。第一种是递归。这种递归方式是将两个有序数组进行合并,那么时间复杂度就是O(N)了,我们还需要一个临时数组原创 2020-05-29 19:13:33 · 385 阅读 · 0 评论 -
十大排序之堆排序(C语言实现)(排序算法)
堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。我们首先默认为是升序排列,那么我们需要构建最大堆。对于给定的数组序列,我们首先将这个数组给构成最大堆的的形式。举个栗子堆首先是这样的。然后,从最后一个节点开始,找它的父结点,如果比父结点大,则进行交换。然后父结点再和父父结点进行比较,如果大,则再进行交换。此时我们发现[4,5,6]这个堆出现了错误。然后再进行原创 2020-05-29 11:32:24 · 2212 阅读 · 1 评论 -
十大排序之希尔排序(C语言实现)(排序算法)
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止.时间复杂度O(n^(1.3—2))空间复杂度O(1)举个例子:在这里我们要提出逆序对的相原创 2020-05-29 10:12:06 · 540 阅读 · 0 评论 -
十大排序之插入排序(排序算法)(C语言实现)
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。插入排序的大概思路就是这样。首先我们从第二个元素开始找,(默认升序排列)如果比前面的大,则交换。然后是第三个元素,再和第二个比较,第一个比较,以此类推。下面是代码实现#incl原创 2020-05-29 10:03:32 · 385 阅读 · 0 评论 -
十大排序之选择排序(排序算法)(C语言实现)
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。选择排序是不稳定的排序算法,最好时间复杂度O(n^2)最坏时间复杂度也是O(n^2)选择排序大概思路就是首先从用户给的无序数组中找出一个最小的(默认为升序排列),放到最小数组下标,然后最小数组下标原创 2020-05-28 23:17:44 · 348 阅读 · 0 评论 -
十大排序之冒泡排序(C语言)
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。举例:(1)要排序数组:[10,1,35,61,89,36,55]冒泡排原创 2020-05-28 22:55:27 · 376 阅读 · 0 评论