位图排序(Bit-map sort)的第一次实验
代码
#include<iostream>
#include"test.h"
std::string decoding (const unsigned char* const bytes);
inline void clrByte (unsigned char *byte);
unsigned char* bitMapSort (const unsigned int* const unsortedArray, const unsigned int sizeOfArray);
inline void insertIntoByte (unsigned char & const byte, unsigned int bit)
{
unsigned char* pt = &byte;
if (bit > 7)
bit = 0;
unsigned int mark = (1<< (7 - bit));
*pt |= mark;
}
/*
数组的元素的大小范围不超过元素的个数,且都为正整数
*/
unsigned char* bitMapSort (const unsigned int* const unsortedArray, const unsigned int sizeOfArray)
{
static const unsigned int numOfBitInByte = 8;
unsigned char *bytes;
unsigned int numOfBytes = sizeOfArray / numOfBitInByte + 1;
bytes = new unsigned char [numOfBytes];
for (size_t i = 0; i < numOfBytes; ++i)
{
clrByte(&bytes[i]);
}
for (size_t i = 0; i < sizeOfArray; ++i)
{
unsigned int baseAddress = unsortedArray[i] / numOfBitInByte;
unsigned int offset = unsortedArray[i] % numOfBitInByte;
insertIntoByte(bytes[baseAddress] ,offset);
}
return bytes;
}
inline void clrByte (unsigned char *byte)
{
*byte = 0;
}
总结
思路来自于编程珠玑的第一章,代码存在的问题有:
只能处理不大于数组长度的正整数
没有编码与解码的函数
还存在一定的魔数,例如 7
以C的思路写C++