哈哈,第一篇博客,意义非凡哈。
将《编程珠玑》第一章的位图排序简单的实现了一下。
#include<stdio.h>
#define SHIFT(a) (0x01<<(a))
#define SHIFTTORIGHT(a) (0x80>>(a))
#define MAX 10 //待排序序列中最大值不大于8*MAX
typedef unsigned char uchar;
int main()
{
char pause;
int DataToSort;
int TotalNum;
int i,j;
int Quotient, Remainder;
uchar vector[MAX];
for (i = 0; i < MAX; i++)
vector[i] = 0;
printf("Input total integers(smaller than %d):\n",MAX*8);
scanf_s("%d", &TotalNum, sizeof(int));
for (i = 0; i < TotalNum; i++)
{
scanf_s("%d", &DataToSort, sizeof(int));
Quotient = DataToSort / 8;
Remainder = DataToSort % 8;
//vector[Quotient] |= SHIFT(Remainder);
vector[Quotient] |= SHIFTTORIGHT(Remainder);
}
for (i = 0; i < MAX; i++) //输出
{
for (j = 0; j < 8; j++)
{
if ((vector[i] & SHIFTTORIGHT(j)) != 0x00)
printf("%d ", 8 * i + j);
}
}
while ((pause = getchar()) != '\n');
pause = getchar();
return 0;
}