本章节主要证明对包含n个元素的输入序列来说,任何比较排序在最坏情况下都要经过omega(nlgn)次比较。从而证明归并排序和堆排序是渐近最优的。同时,介绍了三种线性时间复杂度的排序算法:计数排序、基数排序和桶排序。1. 排序算法的下界在确定排序算法的下界时,借助决策树模型。决策树模型是一棵完全二叉树...
分类:
其他好文 时间:
2014-08-29 18:01:18
阅读次数:
239
1.基数排序不是基于比较的排序,是一种线性排序。2基数排序如何实现?列入:3, 22, 93, 43, 55, 14, 28, 65, 39, 81首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:01 812 223 73 93 434 145 55 65678 289 39第二步...
分类:
其他好文 时间:
2014-08-29 14:23:07
阅读次数:
169
最近忙着复习找工作,熟悉了下排序算法,动手写了一下,发现有些问题的边界条件还是没有考虑清楚,不过好在调试成功。不稳定排序:堆排序,快速排序,希尔排序;稳定排序:插入排序,冒泡排序,选择排序,归并排序,基数排序等。插入排序算法代码:void InsertSort(int A[],int n){ ...
分类:
其他好文 时间:
2014-08-28 19:39:25
阅读次数:
287
#include#include#includestruct Node{ int key; Node *next; Node(int k) { key = k; next = NULL; }};void Insert(Node **phead...
分类:
其他好文 时间:
2014-08-26 21:15:56
阅读次数:
154
日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就...
分类:
编程语言 时间:
2014-08-25 21:07:44
阅读次数:
373
学渣乱搞系列之后缀数组 by 狂徒归来 后缀数组,其nlogn的构造方法,比较麻烦,十几个循环,基数排序?计数排序?各种排序,各种凌乱,学渣表示鸭梨很大啊!学渣从《挑战程序设计竞赛》中偷学了一点nlog2n的构造方法。字符串后缀(Suffix)是指从字符串的某个位置开始到其末...
分类:
其他好文 时间:
2014-08-23 12:30:30
阅读次数:
217
经典的排序算法有十种,分别是:选择排序、插入排序、希尔排序、冒泡排序、堆排序、合并排序、快速排序、计数排序、基数排序和桶排序。
下面对这些算法分类如下:
选择排序:简单选择排序、堆排序
插入排序:直接插入排序、二分插入排序、希尔排序
快速排序:快速排序、随机化快速排序
线性时间排序:计数排序、基数排序、桶排序
其他:冒泡排序、合并排序
这些排序排序算法的时间复杂度,稳...
分类:
其他好文 时间:
2014-08-20 16:31:32
阅读次数:
185
在箱子排序中,虽然时间复制度只有(n),但如果其箱子序列较大的话将会导致程序的空间复杂度较大,所以对于对于属性值跨度比较大的序列可以采用基数排序法。
概述:具体的做法是并不直接对这些数排序,而是采用一些基数来分解这些数,例如:用基数10来分解3725可以得到3、7、2和5。而利用60来分解可以得到1、2、5。然后再根据每一位基数从低位到高位对原数据进
行排序,即若最长的基数有m位,直到...
分类:
其他好文 时间:
2014-08-19 22:27:55
阅读次数:
208
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 本文将依次介绍上述八大排序算法。算.....
分类:
其他好文 时间:
2014-08-19 14:31:04
阅读次数:
280
基数排序(radix sort)是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。
排序思想:
首先按照数据的最低位(个位)将数据分配到0~9十个桶中,然后依次将这些桶中的数据取出来得到按照个位排序后的结果,然后...
分类:
其他好文 时间:
2014-08-19 12:58:54
阅读次数:
253