设为首页 加入收藏

TOP

一步一步写算法(之基数排序) (二)
2014-11-23 23:36:32 来源: 作者: 【 】 浏览:12
Tags:步一步 算法 基数 排序
array[inner] = -10;

break;

}

}

}

memmove(array, swap, sizeof(int) * length);

return;

}

d)把a、b、c组合起来构成基数排序,直到某一分位上的数据为0

void radix_sort(int array[], int length)

{

int* pData;

int weight = 1;

int count;

int* swap;

if(NULL == array || 0 == length)

return;

pData = (int*)malloc(sizeof(int) * length);

assert(NULL != pData);

memmove(pData, array, length * sizeof(int));

swap = (int*)malloc(sizeof(int) * length);

assert(NULL != swap);

while(1){

count = pre_process_data(pData, length, weight);

if(!count)

break;

sort_for_basic_number(pData, length, swap);

sort_data_by_basic_number(array, pData, swap, length, weight);

memmove(pData, array, length * sizeof(int));

weight ++;

}

free(pData);

free(swap);

return;

}

void radix_sort(int array[], int length)

{

int* pData;

int weight = 1;

int count;

int* swap;

if(NULL == array || 0 == length)

return;

pData = (int*)malloc(sizeof(int) * length);

assert(NULL != pData);

memmove(pData, array, length * sizeof(int));

swap = (int*)malloc(sizeof(int) * length);

assert(NULL != swap);

while(1){

count = pre_process_data(pData, length, weight);

if(!count)

break;

sort_for_basic_number(pData, length, swap);

sort_data_by_basic_number(array, pData, swap, length, weight);

memmove(pData, array, length * sizeof(int));

weight ++;

}

free(pData);

free(swap);

return;

}

总结:

(1)测试的时候注意负数的情形

(2)如果在某一位数据相同,那么需要考虑上一轮数据排序的情况

(3)代码中多次分配小空间,此处代码待优化

补充:

(1)10月15日晚上修改了余数取值范围,这样负数也可以参加排序

(2)10月16日上午增加了一个swap内存分配,避免了内存的重复分配和释放

(3)10月16日上午删除了count计数,一旦发现有不等于0的数据直接返回为1,不需要全部遍历数据

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一步一步写算法(之选择排序) 下一篇《C和指针》看书笔记

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: