sysy-data/functional_c/sy/59_sort_test5.sy

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;
}