heapSort에 걸렸습니다. 나는 약간의 코드를 가지고 있지만 컴파일하는데 어려움을 겪고 있기 때문에 꽤 잘못된 것이라고 생각한다. 어떤 제안? 힙 정렬은 구현하기가 쉽지만 구문 오류가 많습니다. 여기 내 코드는 다음과 같습니다HeapSort를 구현하려고 시도했습니다.
는/* Framework for Heap Sort
* CS333 Spring 2011
*
*/
#include <stdio.h>
#define MAX_SIZE 1000000
int data[MAX_SIZE];
int n;
int j;
int parent(int j) {
if(j==1)
return 0;
if(j%2==0)
return ((j/2)-1);
else
return ((j/2));
}
int left(int j) {
return (2 * j) + 1;
}
int right(int j) {
return (2 * j) + 2;
}
void heapify(int data[], int j) {
int l = left(j), great;
int r = right(j);
if ((data[l] > data[j]) && (l < sizeof(data))) {
great = l;
}
else {
great = j;
}
if ((data[r] > data[great]) && (r < sizeof(data))) {
great = r;
}
if (great != j) {
int temp = data[j];
data[j] = data[great];
data[great] = temp;
heapify(data, great);
}
}
int BuildMaxHeap(int data[]) {
for (int j = (sizeof(data) - 1)/2; j >= 0; j--) {
heapify(data, j);
return data;
}
}
void HeapSort(int data[]) {
BuildMaxHeap(data);
for (int j = sizeof(data); j > 0; j--) {
int temp = data[0];
data[0] = data[data.sizeof() - 1];
data[sizeof(data) - 1] = temp;
sizeof(data) = sizeof(data) - 1;
heapify(data, 0);
}
}
int main()
{
int i;
/* Read in the data */
n = 0;
while (scanf("%d", &data[n]) == 1)
++n;
/* Sort the numbers low to high */
HeapSort(data);
/* Print out the data */
for (i = 0; i < n; ++i)
printf("%d", data[i]);
}
무엇 당신의 실수인가요? – qwertymk
전역 변수'j'는 필요 없습니다; 'j'가 함수에서 사용되는 곳마다, 지역 변수가 있습니다. 전역 변수'n'은 필요 없습니다; 'main()'에서 지역적이어야하고 정렬 될 요소의 수를 알아야하는 다른 함수로 전달되어야합니다. 백만개의 정수를 정렬하는 것은 사소한 일입니다. 코드를 작성한 후에는 백만 번에서 천 번까지 처리 할 수 있습니다 (여분의 시간을주고받습니다). –