读书人

大家帮小弟我看看自己写的排序如何样

发布时间: 2012-12-28 10:29:05 作者: rapoo

大家帮我看看自己写的排序怎么样
void myqort(int *arr,int bits,int len) /*bits means the length of the max one in arr*,len is the count of arr*/
{
int offset = 1<<(bits-1);
int *bigger = malloc(len*sizeof(int));
int *smaller = malloc(len*sizeof(int));
int *p = bigger;
int *q = smaller;
int i = 0;
for(;i<len;i++)
{
int *tmp = arr+i;
if(*tmp&offset)
{
*p = *tmp;
p++:
}
else
{
*q = *tmp;
q++;
}
}
if(bits>0)
{
if(p != bigger)
{
myqort(bigger,bits-1,p-bigger);
}
if(q != smaller)
{
myqort(smaller,bits-1,q-smaller);
}
}
memcpy(p,smaller,q-smaller);
memcpy(arr,bigger,len);
free(bigger);
free(smaller);
return;
}
个人测试过时间上跟快速排序差不多,而且顺序性好,不会打乱。随便给点建议
[解决办法]
嗯,想法不错,感觉和快排的思路是一样的,只是在选取枢纽元的方法不一样,所以在时间复杂度上是一样的。

虽然是稳定排序,但是代价是额外的空间太大,即空间复杂度太高。
[解决办法]

引用:
引用:引用:原理是这样的:
将每个数从最高位比较,分出大小两堆,递归在从次高位依次归类。
如1101 0010,1101 1010,0001 1110三个数流程这样:前两个先归为一堆,第三个是小的一堆;大堆里有继续
比较。如此以往就可以了。

这其实就是排序二叉树吧


当然不一样了……


你可能理解错我的意思了
你使用的按位分类,对于最高位,0的分为一类,1的分为一类
这其实就等于往待排序的数组中人为插入了1000 0000
然后每个数和1000 0000比较

读书人网 >软件架构设计

热点推荐