排序
kyan_
这个作者很懒,什么都没留下…
展开
-
排序【1】之堆排序的C语言实现
堆排序堆堆是数据结构里的堆,而不是内存模型中的堆。堆可以看做一棵树。堆中任意结点的值总是不大于(不小于)其子节点的值。堆分为最小堆(小跟堆)和最大堆(大根堆)。 最大堆 最小堆堆排序的步骤1.先将数组->二叉堆2.去掉堆顶再调整为二叉堆如 将数组里的数字从小到大排序:原创 2017-11-30 19:45:53 · 377 阅读 · 0 评论 -
排序【2】之冒泡排序的C语言实现
在这段日子整理了一下排序的几种方法。冒泡是运用最多的一种。基本上冒泡排序就可以解决问题,所以熟练的掌握它很有必要。冒泡排序 对于给定的n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换其位置,进行一轮比较和交换位置后,n个记录中的最大记录将位于第n位;然后对前(n - 1)个记录进行第二轮比较;重复该过程直到进行比较的记录只剩下一个为原创 2017-12-04 12:26:44 · 471 阅读 · 0 评论 -
排序【4】之直接插入排序的C语言实现
对于给定的一组记录,初始时假定第一个记录自成一个有序的序列,其余的记录为无序序列;接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。例:将 29 18 87 56 3 27 按由小到大排序 ① (29) (18 87 56 3 27) ② (18 29) (87 56 3 27) ③原创 2018-01-16 20:02:48 · 2346 阅读 · 0 评论 -
排序【5】之归并排序的C语言实现
利用递归与分治技术将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列。 原理如下:对于给定的一组记录,首先将两个相邻的长度为1的子序列进行归并,得到n/2个长度为2或者1的有序子序列,在将其两两归并,反复执行此过程,直到得到一个有序的序列为止。归并排序特点:平均时间复杂度: O(nlog2n)稳 定原创 2018-01-19 19:57:46 · 349 阅读 · 0 评论 -
排序【3】之希尔排序的C语言实现
希尔排序也称为“缩小增量排序”,基本原理是:首先将待排序的元素分为多个子序列,使得每个子序的元素个数相对较少,对各个子序分别进行直接插入排序,待整个待排序序列“基本有序后”,再对所有元素进行一次直接插入排序。具体步骤如下: (1)选择一个步长序列t1, t2, ..., tk,满足ti > tj(i <j),tk = 1。 (2)按步长序列个数k,对待排序序列进行k趟排序。原创 2017-12-12 17:06:06 · 502 阅读 · 0 评论 -
排序【6】之快速排序的C语言实现
快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。 原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。快速排序特点:稳 定 性:不稳定平均时间复杂度: O(nlog原创 2018-01-20 13:32:36 · 411 阅读 · 0 评论 -
排序【7】之简单选择排序的C语言实现
是一种简单直观的排序算法,他的基本原理是:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮排序,得到最小的记录并与第二个记录进行位置交换;重负该过程,直到进行比较的记录只有一个为止。简单选择排序特点:最 大 特 点:移动次数少 时间复杂度:总共比较 n(n-1)/2 次 ,移动次数最多n-1, 时间复原创 2018-01-20 14:18:14 · 442 阅读 · 0 评论 -
排序【8】之基数排序的C语言实现
基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。基数排序不需要进行记录关键字间的比较。主要分为两个过程:(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中 基数排序的特点:稳 定 性:稳定 时间复杂度:O(kn)(k表原创 2018-01-20 15:10:01 · 2683 阅读 · 0 评论