Data_Structure/資料結構光碟檔/CH13/heapSort.c.txt

68 lines
1.4 KiB
Plaintext
Raw Normal View History

2025-01-20 21:25:33 +08:00
/* file name: heapSort.c */
/* <20><><EFBFBD>n<EFBFBD>Ƨ<EFBFBD> */
#include <stdio.h>
void adjust(int, int);
void printDashLine(void);
int data[11] = {0, 75, 23, 98, 44, 57, 12, 29, 64, 38, 82};
int main()
{
int i, k, temp;
printf("\n<< Heap sort >>\n");
printf("\n<>Ƨǫe<C7AB><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : ");
for(k = 1; k <= 10; k++)
printf("%d ", data[k]);
printf("\n");
printDashLine();
for(i = 10/2; i > 0; i--)
adjust(i, 10);
printf("\nHeap : ");
for (k = 1; k <= 10; k++)
printf("%3d ", data[k]);
for (i = 9; i > 0; i--) {
temp = data[i+1];
data[i+1] = data[1];
data[1] = temp; /* <20>N<EFBFBD><4E><EFBFBD>کM<DAA9>̫᪺<CCAB>`<60>I<EFBFBD>洫 */
adjust(1, i); /* <20>A<EFBFBD><41><EFBFBD>s<EFBFBD>վ㬰<D5BE><E3ACB0><EFBFBD>n<EFBFBD><6E> */
printf("\nProcess: ");
for (k = 1; k <= 10; k++)
printf("%3d ", data[k]);
}
printf("\n\n<>Ѥp<D1A4>ܤj<DCA4>Ƨǫ᪺<C7AB><E1AABA><EFBFBD><EFBFBD> : ");
for(k = 1; k <= 10; k++)
printf("%d ", data[k]);
printf("\n");
return 0;
}
void adjust(int i, int n) /* <20>N<EFBFBD><4E><EFBFBD>ƽվ㬰<D5BE><E3ACB0><EFBFBD>n<EFBFBD><6E> */
{
int j, k, done = 0;
k = data[i];
j = 2*i;
while ((j <= n) && (done == 0)) {
if ((j < n) && (data[j] < data[j+1]))
j++;
if (k >= data[j])
done = 1;
else {
data[j/2] = data[j];
j *= 2;
}
}
data[j/2] = k;
}
void printDashLine()
{
for (int k = 0; k < 52; k++)
printf("-");
printf("\n");
}