- 注册时间
- 2007-12-28
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 12787
- 在线时间
- 小时
|
发表于 2009-11-3 18:39:22
|
显示全部楼层
本帖最后由 liangbch 于 2009-11-3 18:43 编辑
以下是我写的位排序代码,包含排序函数和测试程序- #include <stdio.h>
- #include <stdlib.h>
- #include <memory.h>
-
- typedef unsigned long DWORD;
- typedef int BOOL;
-
- #define TRUE 1
- #define FALSE 0
-
- #define MAX_LEN 65536
-
- DWORD data[MAX_LEN];
- DWORD databak[MAX_LEN];
-
- void printArray(DWORD *p, int len);
-
- //bit 排序核心算法,这是一个递归函数
- void bitSort(DWORD *p, int begin, int end, DWORD mask )
- {
- int i=begin;
- int j=end;
-
- if ( j==i+1 && p[j]>=p[ i ])
- return;
- if ( mask<=0)
- return ;
- while (i<j)
- {
- DWORD t;
- while ( (p[ i ] & mask) ==0 && i<=end)
- i++;
- while ( (p[j] & mask) >0 && j>=begin)
- j--;
-
- if (i<j)
- {
- t=p[ i ];
- p[ i ]=p[j];
- p[j]=t;
- }
- }
-
- mask/=2; i--; j++;
- if (i>begin)
- {
- bitSort(p,begin,i,mask);
- }
-
- if (j<end)
- {
- bitSort(p,j,end,mask);
- }
- }
-
- //使用 bit sort 对数组p 进行排序
- void mySort1(DWORD *p, int len)
- {
- DWORD max=p[0];
- DWORD mask=2147483648;
- int i;
-
- if (len<2)
- return;
-
- for (i=1;i<len;i++)
- {
- if (p [ i ] > max)
- max=p[ i ];
- }
-
- while ( mask > max)
- mask/=2;
- bitSort(p,0,len-1,mask);
- }
-
- //打印数组
- void printArray(DWORD *p, int len)
- {
- int i;
- for (i=0;i<len;i++)
- {
- if (i>0)
- printf(",");
- printf("%u",p[ i ]);
- }
- printf("\n");
- }
-
- //检查数组是否是增序排列
- BOOL checkArray(DWORD *p,int len)
- {
- int i;
- BOOL ret=TRUE;
- for (i=0;i<len-1;i++)
- {
- if (p[i+1]< p[ i ] )
- {
- ret=FALSE; break;
- }
- }
-
- return ret;
- }
-
- //bit排序测试程序,产生1 到 MAX_LEN,对长度为1到 MAX_LEN的数组进行排序
- void testBitSort()
- {
- int i,j;
- for (i=1;i<=MAX_LEN;i++)
- {
- for (j=0;j<i;j++)
- {
- data[j]= (rand() & 255);
- }
-
- memcpy(databak,data,i*sizeof(DWORD));
- mySort1(data,i);
-
- if ( !checkArray(data,i) )
- {
- printf("error\n");
-
- printf("Before sort\n\t");
- printArray(databak,i);
-
- printf("After sort\n\t");
- printArray(data,i);
- break;
- }
- }
- }
-
- int main(int argc, char* argv[])
- {
- testBitSort();
- return 0;
- }
复制代码 |
|