Array.prototype.sort
这个地方是实现不同而导致的问题,而且我认为这属于一个比较重大的坑。
表现上是:safari 和 chrome 两者的结果返回是不一致的。
// 在chrome中:
[1, 10, 100].sort(x => 10 - x)
//
继续阅读 »
I have a class that needs to obtain a reference to it's application's AssetManager. This class does not extend any sort of android UI class, so it doesn't have a getContext() method, or anything similar. Is there some sort of static Context.getCurrentApplicationContext() type of method?
To clarify: my class is inte
继续阅读 »
位图排序简介
位图排序的直接思路是想通过有限位数(比如1位)去映射一个整数,从而节省存储空间,而间接带来的好处是给指定数据集合排序了。
实际案例介绍
本案例摘抄自《编程珠玑》一书。
输入:
所输入的是一个文件,至多包含n个正整数,每个正整数都要小于n,这里n=10^7。如果输入时某一个整数出现了两次,就会产生一个致命的错误。这些整数与其他任何数据都不关联。
输出:
以非递减形式输出经过排序的整数列表。
约束:
至多(大概)只要1MB的可用主存;但是可用磁盘空间非常充足。运行时间至多只允许几分钟;10分钟是最适宜的运行时间。
代码实现如下
more
``` java
include
include
in
继续阅读 »
在C++03中, 标准容器提供了begin与end函数
vector v;
int a[100];
sort(v.begin(), v.end());
sort(a, a+sizeof(a)/sizeof(a[0]));
为了统一数组跟容器的语法, C++11提供了begin()函数
继续阅读 »
这是一个基础算法系列,主题是:为什么知道原理还是写不出正确的程序呢?
第一篇已经写好,叫做我尝试去写快排,结果。。。。文章结构都差不多:原理、联想、用法、框架、分步实现、完整代码及测试用例。
原理
插入排序的原理是:
- 将集合分为两个部分:已排好的部分和待排序的部分
- 每次从待排序部分抽一个元素跟已排好部分中的元素逐一比较,直到找到合适的位置,插入待排序元素
- 合适的位置可以是第一个比待排序元素小(大)的,也可能是已排好部分的下界
继续阅读 »
希尔排序不应该放在这个系列的,因为并不十分清楚它的原理,想要完整了解的朋友请看维基百科
下面是原理的简单解释:
继续阅读 »
原理
将待排序元素分为前后两部分,分别调用归并排序使它们有序
从头开始逐个比较前后两部分的元素,根据比较结果先后放进新数组,最终返回这个新数组
联想
归并排序用到了递归,递归终止的条件是待排序元素数量小于 2
归并排序比较之后不会交换元素,而是生成新的数组
继续阅读 »
在了解堆排序之前,我们有必要清楚“什么是堆呢?”。
堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。
堆的逻辑定义:
堆的实现通过构造二叉堆(英语:binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。
任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
堆总是一棵完全树。即
继续阅读 »
1,通常用到 perf sched record 收集系统相关的调度数据, 然后使用pert ached latency --sort max 来打印出收集到的信息,perf sched latency --sort max 展现的数据中各个column的含义如下:
继续阅读 »
《编程珠玑》第 32 页,提到:“尽管第一个二分查找程序于1946年就已经公布了,但是第一个没有 bug 的二分查找程序在 1962 年才出现。”还说参加课堂测试的专业程序员中, 90% 写的二分查找程序都有 bug 。
真的有那么难吗?我心血来潮,动手写起了快排(不要问为什么不是二分查找)。隐约记得快排的原理如下:
继续阅读 »