排序
我站在桥上看风景
这个作者很懒,什么都没留下…
展开
-
基本排序方法-选择排序和冒泡排序(来自:算法:C语言实现)
选择排序最简单的一种排序算法的工作过程如下.首先,选出数组中最小的元素,将它与数组中第一个元素进行交换.然后找出次小的元素,并将它与数组中第二个元素交换.按照这个方法一直进行下去,直到整个数组排完序.这种方法叫做选择排序,因为它是通过不断筛选出剩下元素中的最小元素来实现的.冒泡排序对于l~r-1内的i值,内部循环(j)通过从左向右遍历元素,对连续的元素进行比较-交换操作,实现将a[i]...原创 2018-08-14 10:31:47 · 417 阅读 · 0 评论 -
基本排序方法-插入排序及改进(来自:算法:C语言实现)
和选择排序一样,排序过程中当前索引左边的元素都是排好序的,不过它们不是处于最终的位置上,因为它们还需要进行移动为更小的数据腾出空间.不过当索引移到最右边时,数组就完全排好序了.//插入排序void Insertion(int a[], int l, int r){ int i, j; //外层循环保证i之前的元素有序,元素位置暂时稳定 for(i = l+1; i...原创 2018-08-14 10:48:19 · 253 阅读 · 0 评论 -
基本排序方法-希尔排序(c/c++)
希尔排序法是插入排序的扩展,它通过允许非相邻的元素进行交换来提高执行效率.该算法的思想是将文件重新排列,使文件具有这样的性质,每第h个元素(从任何地方开始)产生一个排好序的文件.这样的文件称为h-排序的.换句话说,h-排序的文件是h个独立的已排好序的文件,相互交叉在一起.对h值较大的h-排序文件,可以通过移动相距较远的元素,比较容易地使h值较小时进行h-排序.通过对直到1的h值的序列...原创 2018-08-14 17:56:42 · 387 阅读 · 0 评论 -
快速排序(来自:算法:C语言实现)
快速排序算法是一种分治排序算法.它将数组划分为两个部分,然后分别对两个部分进行排序.我们将看到,划分的准确位置取决于输入数组中元素的初始位置.关键在于划分过程,它重排数组,使得以下三个条件成立:(i)对于某个i,a[i]在最终位置上 (ii)a[left],...,a[i-1]中的元素都比a[i]小 (iii)a[i+1],...a[right]中的元素都比a[i]大.我们通过划分来完...原创 2018-08-15 15:52:59 · 13268 阅读 · 0 评论 -
快速排序改进(来自:算法:C语言实现)
利用三者取中法改进快速排序实现取数组中第一个,中间和最后一个元素的中间元素作为划分元素(否则将这些元素排除在划分过程之外).大小为11或更小的数组在划分过程中被忽略,然后使用插入排序来完成排序.#include <cstdio>#include <cstdlib>#include <algorithm>#include <stack>...原创 2018-08-15 17:49:54 · 827 阅读 · 0 评论 -
归并排序(c/c++)
归并排序的优点是稳定,时间复杂度与NlgN成正比,缺点是所占空间与N成正比.自顶向下的归并排序对一个数组进行归并排序,可将一个数组分成两个,先使得子数组有序,然后再将两个有序的子数组合成一个有序的子数组,即将数组的排序转化为对两个有序数组的合并.对于一个无序的数组来说,先递归操作是最小的子数组有序,然后再合并子数组使其成为较大的数组,直到整个数组有序.在将两个子数组合并的时候,需要借助另一...原创 2018-08-16 10:34:55 · 458 阅读 · 0 评论 -
归并算法的改进
递归对数组b排序,将排序后的结果放入a中,下次递归排序时对数组a排序,将结果放入b中,以此方式可以完成对数组的排序.且没有出现在子数组合并后数组之间的复制.#include <cstdio>#include <cstdlib>#include <algorithm>#include <stack>#include <queue&g...原创 2018-08-16 11:22:41 · 523 阅读 · 0 评论 -
归并排序的链表实现
利用归并法可以对链表进行排序,而且不需要占用额外空间.对于一个无序链表,先利用循环找到链表的中值,再利用递归先将一个链表分成两个链表,逐步递归,递归停止的条件是链表中只有一个元素或是没有元素的情况,然后完成链表的有序.#include <cstdio>#include <cstdlib>#include <algorithm>#include <...原创 2018-08-16 17:30:15 · 2095 阅读 · 0 评论 -
堆排序(c/c++)
不需要额外空间可对数组排序,把维持在待排序的数组内.在建堆时,采用自顶向下堆化的方法.堆中的元素向下移动,找到该元素的左孩子,如果左孩子存在的话,就比较左孩子与右孩子的大小,找出其中较大的孩子,与父元素比较,如果父元素较大,则循环停止,否则两元素交换.如此即可完成自顶向下的堆化.在堆排序时,先用一个for循环调用建堆函数来建堆,然后用while循环来将数组中最大的元素找到,再将其放到最后一个位置上...原创 2018-08-17 15:34:34 · 167 阅读 · 0 评论