读书人

大神帮忙见见

发布时间: 2013-03-20 15:25:24 作者: rapoo

大神帮忙看看
/*
============================================================================
Name : HeapSort.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stdlib.h>

int g_array[8] = {19, 33, 4, 23, 8, 5, 14, 20};

void HeadAdjust(int * array, int heap_top, int heap_last);

void HeapSort(int * array, int length);

int main(void)
{
int i;
HeapSort(g_array, 8);
for (i = 0; i < 8; i++)
printf(" %d, ", g_array[i]);
return EXIT_SUCCESS;
}

void HeapSort(int * array, int length)
{
int i;
int temp;
for(i = length / 2; i > 0; i--) // 建立大顶堆
HeadAdjust(array, i, length);
for(i = 0; i < length; i++){
temp = array[0]; // 交换第一个和最后一个
array[0] = array[length - i - 1];
array[length - i - 1] = temp;
HeadAdjust(array, 0, length - i -1);
}
}

//重新建立大顶堆
void HeapAdjust(int * array, int heap_top, int heap_last)
{
int i;
int store = array[heap_top];
for(i = heap_top * 2; i < heap_last; i *= 2){
if (array[i] > array[i + 1])
i++;
if (array[heap_top] > array[i])
break;
array[i] = array[heap_top];
heap_top = i;
}
array[heap_top] = store;
}

编译后说
undefined reference to `HeadAdjust'
什么情况??????
[解决办法]

/*
============================================================================
Name : HeapSort.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stdlib.h>

int g_array[8] = {19, 33, 4, 23, 8, 5, 14, 20};

void HeapAdjust(int * array, int heap_top, int heap_last);

void HeapSort(int * array, int length);

int main(void)
{
int i;
HeapSort(g_array, 8);
for (i = 0; i < 8; i++)
printf(" %d, ", g_array[i]);
return EXIT_SUCCESS;
}

void HeapSort(int * array, int length)
{
int i;
int temp;
for(i = length / 2; i > 0; i--) // 建立大顶堆
HeapAdjust(array, i, length);


for(i = 0; i < length; i++){
temp = array[0]; // 交换第一个和最后一个
array[0] = array[length - i - 1];
array[length - i - 1] = temp;
HeapAdjust(array, 0, length - i -1);
}
}

//重新建立大顶堆
void HeapAdjust(int * array, int heap_top, int heap_last)
{
int i;
int store = array[heap_top];
for(i = heap_top * 2; i < heap_last; i *= 2){
if (array[i] > array[i + 1])
i++;
if (array[heap_top] > array[i])
break;
array[i] = array[heap_top];
heap_top = i;
}
array[heap_top] = store;
}


HeapAdjust不要写成HeadAdjust就行了。
[解决办法]
copy要仔细

读书人网 >C++

热点推荐