摘要:
说明:比较排序算法的复杂度下界是 O(nlog(n))一、计数排序(复杂度是O(n))计数排序要求被排序元素都是整数型变量,即元素能用数组的指标表示(1)统计个元素 i 的个数(2)计算不超过 i 包括 i 的元素的个数(3)将元素 i 放入适当的位子。算法复杂度第一大步统计数字是n+k,其中k表示数字可能取到的最大的数第二步需要复杂度是O(n),因此总的复杂度是 O(n+k). 当k=O(n)时,复杂度是O(n).// counting_sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <vector> 阅读全文
posted @ 2011-10-05 23:04
哈哈开心
阅读(3255)
评论(0)
推荐(0)
摘要:
归并排序比较直观,设数组A被分为两部分A1和A2,并且A1和A2都是排好序的。那么每次比较A1和A2的头两个元素,把最大的(最小的)取出来,当A1或者A2中没有元素可取的时候,排序也就结束了。对于A1和A2的排序采用同样的方法。如果A1或者A2只含一个元素,则已经排好了序。复杂度:每次采用二分的办法划分数组,则T(n) = 2T(n/2) + n = nlog(n).归并排序的最好最坏复杂度均为 nlog(n). 阅读全文
posted @ 2011-10-05 20:59
哈哈开心
阅读(202)
评论(0)
推荐(0)
摘要:
快速排序是一个分治过程:对于数组A[p….r]选取A中的一个元素A(q),按照大小将A分成两部分 A[p…q-1] 和 A[q….r]其中 A[p…q-1] 中所有的元素都小于A(q),而 A[q….r]中所有元素都大于 A(q).对于划分后的数组依然采用同样的方法分裂。注意分裂后的数组可以为空,如此进行下去直到分裂后的元素不超过一个,这将所有的小数组合并在一起就是排好序的。递归算法如下:quicksort(A,p,r)if p<rthen q=partition(A,p,r)quicksort(A,p,q-1)quicksort(A,q,r)算法的关键是对数组的分裂,下面用图示显示分裂 阅读全文
posted @ 2011-10-05 00:01
哈哈开心
阅读(881)
评论(0)
推荐(0)