
排序算法
文章平均质量分 65
哈哈哈哈哈哈丶
花有重开日,人无再少年。
展开
-
【排序算法】:冒泡排序
介绍原理:(升序)比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂度:O(N^2); 空间复杂度:O(1); 稳定性:稳定代码实现:void BubbleSort原创 2017-08-11 14:22:29 · 454 阅读 · 1 评论 -
【排序算法】:希尔排序
介绍希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。原理图: 思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2代码实现void ShellSort(int* arr, int len){ assert(arr);原创 2017-08-11 10:47:20 · 441 阅读 · 0 评论 -
【排序算法】:基数排序
定义基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。原理原创 2017-08-14 17:53:13 · 491 阅读 · 0 评论 -
【排序算法】:计数排序
思路: 设被排序的数组为A,排序后存储到B,C为临时数组。所谓计数,首先是通过一个数组C[i]计算大小等于i的元素个数,此过程只需要一次循环遍历就可以;在此基础上,计算小于或者等于i的元素个数,也是一重循环就完成。下一步是关键:逆序循环,从length[A]到1,将A[i]放到B中第C[A[i]]个位置上。原理是:C[A[i]]表示小于等于a[i]的元素个数,正好是A[i]排序后应该在的位置。而且原创 2017-08-14 14:58:08 · 522 阅读 · 0 评论 -
【排序算法】:快速排序
介绍快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。三数取中我们在 进行快速排序时需要把数据划分为两个部分,需要一个key值。为了避免极端情况(key值是最大或最小值–>划分的两原创 2017-08-11 16:38:08 · 543 阅读 · 0 评论 -
【排序算法】:归并排序
介绍归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程为:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第一个有序表中的元素a[i]复制到r[k]中原创 2017-08-11 16:50:32 · 454 阅读 · 0 评论 -
【排序算法】:堆排序
介绍堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的升序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。思想: 用升序建大堆,降序建小堆。(我原创 2017-08-11 11:16:37 · 722 阅读 · 0 评论 -
【排序算法】:直接插入排序
介绍思想:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 实现原理:第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 时间复杂度:O(N^2); 空间复杂度:O(1); 稳定性:稳定;代码实现代码实现://直接插入排序原创 2017-08-11 10:17:22 · 509 阅读 · 0 评论 -
【排序算法】:选择排序
介绍选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。平均时间复杂度:O(n2) 空间复杂度:O(1) (用于交换和记录索引) 稳定原创 2017-08-11 11:02:45 · 419 阅读 · 0 评论 -
【排序算法】:九大排序算法总结
直接插入排序参考博客:【排序算法】:直接插入排序 时间复杂度:平均情况:O(N^2)最好情况:O(N)最坏情况:O(N^2)空间复杂度:O(1) 稳定性:稳定希尔排序参考博客:【排序算法】:希尔排序时间复杂度:平均情况:O(N^1.3)最好情况:O(N)最坏情况:O(N^2)空间复杂度:O(1) 稳定性:不稳定选择排序参考博客:【排序算法】:选择排序 时间复杂度:平均情况:原创 2017-08-14 18:27:49 · 724 阅读 · 0 评论