前面讲的是比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。 一,计数排序(Counting Sort) (1)算法简介 计数排序(Counting sort)是一种稳定的排序 ...
分类:
编程语言 时间:
2018-06-08 00:51:06
阅读次数:
245
字典树类似于二叉树 每一个节点中都有一个指针数组 存的是字符串的一个字符 字典树可以进行查找,统计计数,排序,代码如下 ...
分类:
其他好文 时间:
2018-06-07 20:52:50
阅读次数:
188
数组排序问题(2)昨天我们留了一道题目“给你一个整型数组,里面出现的数在[0-100]之间,能用最优化的方法帮我排序吗”。1.确保我们理解了问题,并且尝试一个例子,确认理解无误.这是一道排序算法题,我们学过很多排序的算法。不一样的是,它给定一个额外的条件,数组里的每个数字都在1-100之间。如果我们采取传统的排序算法,这个条件我们好像用不上。大家在面试的时候如果发现有条件没有用上,基本上我们给出的
分类:
编程语言 时间:
2018-06-06 23:53:53
阅读次数:
255
基数排序:最稳定的排序。 第二个基于非比较的排序。第一个是计数排序 LSD:低位优先 MSD : 高位优先 接下来说的是LSD低位优先 思路:按位建立哈希表,从低位开始 由于每一位都有0~9的阿拉伯数字构成。所以我们可以申请固定的空间 根据个位建立哈希表,再按照顺序放回原数组 根据十位建立哈希表,再 ...
分类:
编程语言 时间:
2018-06-06 15:19:44
阅读次数:
220
经典的排序算法有八种,分别为: Ø 冒泡排序 Ø 选择排序 Ø 插入排序 Ø 归并排序 Ø 希尔排序 Ø 快速排序 Ø 堆排序 Ø 基数排序 其中冒泡排序、选择排序、插入排序称为三大基本排序。 虽然这三大基本排序算法时间复杂度都是O(n2),但是其实细细讨论之下,还是有各自的特点的。 基本思路: 假 ...
分类:
编程语言 时间:
2018-05-29 17:43:20
阅读次数:
133
/** * 基数排序 */ @Test public void RadioSort(){ int[] array = {123,345,5555,66666,764,12,33,455}; int maxLength = maxLength(array); int[] newArray = sort ...
分类:
编程语言 时间:
2018-05-27 14:45:00
阅读次数:
200
第一节讲的计数排序有很好的运行时间表现,但因为占用空间的问题,只适用于数字非常有限的情况;
第二节讲的冒泡排序解决了计数排序空间的问题,但时间复杂度却变成了O(n^2)。
对此的优化引出了快速排序。
分类:
编程语言 时间:
2018-05-19 19:41:57
阅读次数:
220
对于一个int数组,请编写一个计数排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 计数排序 class CountingSort { public: int* countingSort(in ...
分类:
编程语言 时间:
2018-05-19 16:57:47
阅读次数:
235
期末成绩出来了,大白考了第4名,得了6 分,总分10分,回家妈妈打他了一顿:你看邻居家的孩子考得多好呀!
分类:
编程语言 时间:
2018-05-17 21:40:33
阅读次数:
223
一、桶排序 void Bucket_Sort(ElementType A[], int N) { count[]初始化; while(读入1个学生成绩grade) 将该生插入count[grade]链表; for(i=0;i<M;i++) { if(count[i]) 输出整个count[i]链表; ...
分类:
编程语言 时间:
2018-05-11 20:30:43
阅读次数:
175