计数排序

计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。当k=O(n)时,计数排序的运行时间为O(n)。线性复杂度。计数排序不是比较排序算法。稳定算法。

算法思想:对每一个输入元素x,确定出小于x的元素个数。有这个信息后,就可以把x直接放到它在最终输出数组的位置上。
假定输入数组A[1..n],length[A]=n,则存放排序结果的数组B[1..n],临时存储区C[0..k]。 Continue reading

float表示

首先看一段代码:

#include <iostream>
using namespace std;

int main()
{
	int i1 = 5;
	float f1 = i1;
	cout << f1 <<endl;

	int i2 = 37;
	float f2 = *(float*)&i2;
	cout << f2 <<endl;
}

答案输出

由于float在内存中的表示如下:

f1不是原来的5,而是1.25*2的2次方,重新表示成浮点数的形式。
相对于f2,&i取地址变为int*后又转换成float*,再对它进行解引用,所以在同一块内存地址上以float形式读取。所以,37对应的比特位在浮点数的形式上,只能以此计算出.xxxxx的部分,而exp位为0,所以最后计算出的浮点数将为一个奇小无比的数。