#include <stdio.h>
void myswap(int a[], int x, int y) {
int tmp;
tmp = a[x];
a[x] = a[y];
a[y] = tmp;
}
void hsort(int a[], int n, int (*f)(int , int)) {
int last, p, j, k;
/* step.1 */
last = 1;
while (last < n) {
p = last;
while (p > 0) {
j = (int)((p + 1) / 2) - 1;
if (!f(a[p], a[j]))
myswap(a, p, j);
p = j;
}
last++;
}
/* step.2 */
last = n - 1;
while (last > 0) {
myswap(a, 0, last);
p = 0;
while (p < last) {
j = 2 * p + 1;
k = 2 * p + 2;
if (j < last && k < last) {
if (f(a[k], a[j])) {
if (f(a[p], a[j])) {
myswap(a, j, p);
p = j;
} else
break;
} else {
if (f(a[p], a[k])) {
myswap(a, k, p);
p = k;
} else
break;
}
} else if (j < last && !(k < last)) {
if (f(a[p], a[j])) {
myswap(a, j, p);
p = j;
} else
break;
} else if (!(j < last) && k < last) {
if (f(a[p], a[k])) {
myswap(a, k, p);
p = k;
} else
break;
} else {
/* non operation */
break;
}
}
last--;
}
}
int f(int x, int y) {
if (x < y)
return 1;
else
return 0;
}
int main() {
int i;
int a[] = {31, 41, 59, 26, 53, 58, 97, 93, 23, 84, 62};
int n = (sizeof a) / (sizeof(int));
hsort(a, n, f);
for (i = 0; i < n; i++)
return 0;
}
/* end */
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIG15c3dhcChpbnQgYVtdLCBpbnQgeCwgaW50IHkpIHsKICBpbnQgdG1wOwogIHRtcCA9IGFbeF07CiAgYVt4XSA9IGFbeV07CiAgYVt5XSA9IHRtcDsKfQoKdm9pZCBoc29ydChpbnQgYVtdLCBpbnQgbiwgaW50ICgqZikoaW50ICwgaW50KSkgewogIGludCBsYXN0LCBwLCBqLCBrOwogIC8qIHN0ZXAuMSAqLwogIGxhc3QgPSAxOwogIHdoaWxlIChsYXN0IDwgbikgewogICAgcCA9IGxhc3Q7CiAgICB3aGlsZSAocCA+IDApIHsKICAgICAgaiA9IChpbnQpKChwICsgMSkgLyAyKSAtIDE7CiAgICAgIGlmICghZihhW3BdLCBhW2pdKSkKICAgICAgICBteXN3YXAoYSwgcCwgaik7CiAgICAgIHAgPSBqOwogICAgfQogICAgbGFzdCsrOwogIH0KCiAgLyogc3RlcC4yICovCiAgbGFzdCA9IG4gLSAxOwogIHdoaWxlIChsYXN0ID4gMCkgewogICAgbXlzd2FwKGEsIDAsIGxhc3QpOwogICAgcCA9IDA7CiAgICB3aGlsZSAocCA8IGxhc3QpIHsKICAgICAgaiA9IDIgKiBwICsgMTsKICAgICAgayA9IDIgKiBwICsgMjsKICAgICAgaWYgKGogPCBsYXN0ICYmIGsgPCBsYXN0KSB7CiAgICAgICAgaWYgKGYoYVtrXSwgYVtqXSkpIHsKICAgICAgICAgIGlmIChmKGFbcF0sIGFbal0pKSB7CiAgICAgICAgICAgIG15c3dhcChhLCBqLCBwKTsKICAgICAgICAgICAgcCA9IGo7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChmKGFbcF0sIGFba10pKSB7CiAgICAgICAgICAgIG15c3dhcChhLCBrLCBwKTsKICAgICAgICAgICAgcCA9IGs7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGogPCBsYXN0ICYmICEoayA8IGxhc3QpKSB7CiAgICAgICAgaWYgKGYoYVtwXSwgYVtqXSkpIHsKICAgICAgICAgIG15c3dhcChhLCBqLCBwKTsKICAgICAgICAgIHAgPSBqOwogICAgICAgIH0gZWxzZQogICAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAoIShqIDwgbGFzdCkgJiYgayA8IGxhc3QpIHsKICAgICAgICBpZiAoZihhW3BdLCBhW2tdKSkgewogICAgICAgICAgbXlzd2FwKGEsIGssIHApOwogICAgICAgICAgcCA9IGs7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIHsKICAgICAgICAvKiBub24gb3BlcmF0aW9uICovCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGxhc3QtLTsKICB9Cn0KCmludCBmKGludCB4LCBpbnQgeSkgewogIGlmICh4IDwgeSkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKICBpbnQgaTsKCiAgaW50IGFbXSA9IHszMSwgNDEsIDU5LCAyNiwgNTMsIDU4LCA5NywgOTMsIDIzLCA4NCwgNjJ9OwogIGludCBuID0gKHNpemVvZiBhKSAvIChzaXplb2YoaW50KSk7CiAgaHNvcnQoYSwgbiwgZik7CgogIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAgICBwcmludGYoIiVkLCIsIGFbaV0pOwogIHB1dGNoYXIoJ1xuJyk7CgogIHJldHVybiAwOwp9Ci8qIGVuZCAqLwo=