排序
夏岚丶苍老的小孩
这个作者很懒,什么都没留下…
展开
-
插入排序(c语言)
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。原创 2018-03-22 18:09:22 · 3506 阅读 · 0 评论 -
希尔排序(c语言)
希尔排序:取一个小于n的整数gap(gap又叫做步长),通过把所有距离为gap或者gap的倍数的数据放在一个组里,对每一个组进行插入排序,当每个组有序时,这整个序列就接近有序,然后减小gap,继续上面的操作,gap越小时,预排序完毕越接近有序,当gap等于1时,预排序就相当于直接插入排序。原创 2018-03-23 17:22:05 · 672 阅读 · 0 评论 -
堆排序(c语言)
堆排序的基本思想及步骤 堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了构建初始堆(升序建大堆,降序建小堆) a.给定一个无序数组: b.创建一个大堆 将根节点与最后一个叶子节点进...原创 2018-03-29 20:31:05 · 10112 阅读 · 0 评论 -
归并排序(c语言)
归并排序示例: 把数组平均分成两半,若两个区间有序后,则进行归并。使两个区间有序和快排同样的方法一样,递归到最后只有一个值或者没有时即有序。但在归并时需要开辟一段空间把合并的数据存起来,再放回原数组。时间复杂度: N*logN算法如下:void _MergeSort(DataType* a, DataType* tmp, int le...原创 2018-03-25 23:21:46 · 890 阅读 · 0 评论 -
冒泡排序(c语言)
冒泡排序的基本思想: 从前往后两两判断并交换,把最大的交换到最后面,然后向左缩小无序区间。算法如下:void BubbleSort(DataType* a, size_t n)//冒泡排序{ assert(a); for (size_t end = n; end > 0; --end)//减小区间 { int flag = ...原创 2018-04-01 18:34:57 · 184 阅读 · 0 评论 -
选择排序(c语言)
选择排序: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。对选择排序的改进: 每一趟排序选出最大值和最小值 算法如下:void Swap(DataType* x1, DataType* x2){ DataT...原创 2018-03-27 22:29:41 · 321 阅读 · 0 评论 -
快速排序(c语言)
快速排序的基本思想: 快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比key值小,另外一部分的所有数据都比key值大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序的整体思路:void QuickSort(DataType...原创 2018-04-03 18:40:29 · 984 阅读 · 0 评论 -
快排的非递归实现
基本思想: 用栈来模拟递归的过程部分代码如下:void QuickSortOP(DataType* a, int left, int right){ assert(a); Stack s; StackInit(&s); StackPush(&s, left); StackPush(&s, right); ...原创 2018-04-05 14:11:01 · 257 阅读 · 0 评论