设为首页 加入收藏

TOP

一步一步写算法(之堆排序)(二)
2014-11-23 23:30:09 来源: 作者: 【 】 浏览:4
Tags:步一步 算法 排序
rmal_position(array, index))){

reconstruct_heap(array, swap, length);

}

} e)对单分支节点和满分支节点分别处理

int adjust_normal_position(int array[], int index)

{

int left = index << 1 ;

int right = left + 1;

int median = 0;

int swap = 0;

if(array[index] >= array[left]){

if(array[index] >= array[right]){

return -1;

}else{

swap = right;

}

}else{

if(array[index] >= array[right]){

swap = left;

}else{

swap = array[left] > array[right] left : right;

}

}

if(swap == left) {

median = array[index];

array[index] = array[left];

array[left] = median;

}else{

median = array[index];

array[index] = array[right];

array[right] = median;

}

return swap;

}

STATUS adjust_leaf_position(int array[], int index)

{

int median = 0;

if(array[index] > array[index << 1])

return TRUE;

median = array[index];

array[index] = array[index << 1];

array[index << 1] = median;

return FALSE;

}

int adjust_normal_position(int array[], int index)

{

int left = index << 1 ;

int right = left + 1;

int median = 0;

int swap = 0;

if(array[index] >= array[left]){

if(array[index] >= array[right]){

return -1;

}else{

swap = right;

}

}else{

if(array[index] >= array[right]){

swap = left;

}else{

swap = array[left] > array[right] left : right;

}

}

if(swap == left) {

median = array[index];

array[index] = array[left];

array[left] = median;

}else{

median = array[index];

array[index] = array[right];

array[right] = median;

}

return swap;

}

STATUS adjust_leaf_position(int array[], int index)

{

int median = 0;

if(array[index] > array[index << 1])

return TRUE;

median = array[index];

array[index] = array[index << 1];

array[index << 1] = median;

return FALSE;

}

f)堆排序算法介绍完毕,创建测试用例验证

static void test1()

{

int array[] = {1};

heap_sort(array, sizeof(array)/sizeof(int));

}

static void test2()

{

int array[] = {2, 1};

heap_sort(array, sizeof(array)/sizeof(int));

assert(1 == array[0]);

assert(2 == array[1]);

}

static void test3()

{

int array[] = {3, 2, 1};

heap_sort(array, sizeof(array)/sizeof(int));

assert(1 == array[0]);

assert(2 == array[1]);

assert(3 == array[2]);

}

static void test4()

{

int array[] = {2, 3, 1};

heap_sort(array, sizeof(array)/sizeof(int));

assert(1 == array[0]);

assert(2 == array[1]);

assert(3 == array[2]);

}

static void test5()

{

int array[] = {5,3, 4, 1};

heap_sort(array, sizeof(array)/sizeof(int));

assert(1 == array[0]);

assert(3 == array[1]);

assert(4 == array[2]);

assert(5 == array[3]);

}

static void test6()

{

int array[] = {2, 3,6, 8, 7};

heap_sort(array, sizeof(array)/sizeof(int));

assert(2 == array[0]);

assert(3 == array[1]);

assert(6 == array[2]

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一步一步写算法(之合并排序) 下一篇浅谈C语言中的位段

评论

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