排序算法有很多,冒泡排序,选择排序,堆排序,快速排序,归并排序,基数排序……其中平均复杂度O(nlogn)的排序算法或者在某方面有特殊优势的算法在ACM中才有实际使用价值,所以上述提到的前2种大家以后就不要用了。其他排序算法大家会慢慢接触,本文主要介绍使用最多的排序函数
sort。大家可能会遇到qs...
分类:
其他好文 时间:
2014-05-12 09:24:26
阅读次数:
323
归并排序也是基于分治思想的一种排序算法,是通过对两个或两个以上的有序序列合并来实现的,对两个序列合并的叫两路归并,对两个以上序列合并的叫多路归并。归并排序的时间复杂度也为O(N*logN)。下面来看一下两路归并的实现:基本思想:归并排序时先找出序列的中间元素把序列分解为两个子序列,对子序列重复这个过...
分类:
其他好文 时间:
2014-05-12 05:47:59
阅读次数:
298
一、合并已排序的两个数组,依次比较两个数组元素大小,并按大小加入到暂存数组B,最后保存到A:Algorithm: MERGE(A, p, q,
r)输入:数组A[p...q]和A[q+1...r],各自按升序排列输出:将A[p...q]和A[q+1...r]合并后的升序排序的新数组01. s←p;
...
分类:
其他好文 时间:
2014-05-10 02:43:47
阅读次数:
549
1.
归并排序原理:有长度为n的子序列a[n],可以将其看做n个长度为1的子序列,将相邻子序列两两归并后子序列数量减少一半,再对子序列进行两两归并,数量又减少一般,重复直到得到一个长度为n的子序列2.
实现归并操作的代码如下:/*array[s…m]和array[m+1…t]均已各自有序,合并使得a...
分类:
其他好文 时间:
2014-05-10 00:28:40
阅读次数:
382
(一)插入排序
算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素...
分类:
其他好文 时间:
2014-05-09 22:38:41
阅读次数:
342
之前看到一个题目,大概是:有一个长度为n的数组,数组内的元素取值范围为0到m,且不相等,要求元素经过n次移动后使数组有序(即算法的复杂度为O(n))。看到题目后想了快速排序和归并排序发现并不能满足题目要求,直到有次看书有看到了桶排序然后豁然开朗,所以决定把这些排序算法再写一遍,加深记忆。约定:之后的...
分类:
其他好文 时间:
2014-05-09 10:52:49
阅读次数:
333
归并排序原理:
归并排序用到的是分治思想,即把一个大问题分成两个小问题,然后把一个小问题再分为两个更小的小问题,从最小的问题开始解决,然后把小问题的结果进行整合,最终解决大问题,这种思想是自顶向下的方法,特点是先进行递归,最终进行排序,在之后的快速排序中可以看到,快速排序特点是先进行排序,后进行递归...
分类:
其他好文 时间:
2014-05-09 06:15:26
阅读次数:
280
为什么归并排序如此有用?1.
快捷和稳定归并排序成为?一个非常棒的排序算法主要是因为它的快捷和稳定。它的复杂度即使在最差情况下都是O(n log
n)。而快速排序在最差情况下的复杂度是O(n^2),当n=20的时候,它比归并要慢4.6倍。2.容易实现#coding:utf-8def merge_so...
分类:
编程语言 时间:
2014-05-09 03:44:58
阅读次数:
386
归并排序的基本思想:首先,将R[0..n-1]看成是n个长度为1的有序表,将相邻的有序表进行归并,得到n/2个长度为2的有序表;然后,再将这些有序表成对归并,得到n/4个长度为4的有序表,如此循环下去,最后得到一个长度为n的有序表。
注意的是:Merge()实现了一次归并,接下来需要利用Mer...
分类:
其他好文 时间:
2014-05-08 14:28:05
阅读次数:
484