67 lines
1.3 KiB
Plaintext
67 lines
1.3 KiB
Plaintext
#include "sylib.h"
|
|
int n;
|
|
int swap (int array[], int i, int j){
|
|
int temp;
|
|
temp = array[i];
|
|
array[i] = array[j];
|
|
array[j] = temp;
|
|
return 0;
|
|
}
|
|
int heap_ajust(int arr[], int start, int end) {
|
|
int dad;
|
|
dad = start;
|
|
int son;
|
|
son = dad * 2 + 1;
|
|
while (son < end + 1) { //
|
|
if (son < end && arr[son] < arr[son + 1])
|
|
son = son + 1;
|
|
if (arr[dad] > arr[son])
|
|
return 0;
|
|
else {
|
|
dad = swap(arr,dad,son);
|
|
dad = son;
|
|
son = dad * 2 + 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
int heap_sort(int arr[], int len) {
|
|
int i;
|
|
int tmp;
|
|
i = len / 2 - 1;
|
|
while ( i > -1) {
|
|
tmp = len - 1;
|
|
tmp = heap_ajust(arr, i, tmp);
|
|
i = i - 1;
|
|
}
|
|
i = len - 1;
|
|
while ( i > 0) {
|
|
int tmp0;
|
|
tmp0 = 0;
|
|
tmp = swap(arr,tmp0,i);
|
|
tmp = i - 1;
|
|
tmp = heap_ajust(arr, tmp0, tmp);
|
|
i = i-1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int main(){
|
|
n = 10;
|
|
int a[10];
|
|
a[0]=4;a[1]=3;a[2]=9;a[3]=2;a[4]=0;
|
|
a[5]=1;a[6]=6;a[7]=5;a[8]=7;a[9]=8;
|
|
int i;
|
|
i = 0;
|
|
i = heap_sort(a, n);
|
|
while (i < n) {
|
|
int tmp;
|
|
tmp = a[i];
|
|
putint(tmp);
|
|
tmp = 10;
|
|
putch(tmp);
|
|
i = i + 1;
|
|
}
|
|
return 0;
|
|
}
|