#include <stdio.h>
void sort(int a[], int n) {
int i, j, t, p;
re: if(n < 32) {
for(i = 1; i < n; i++){
for(t = a[i], j = i - 1; j >= 0 && a[j] > t; j--)
a[j + 1] = a[j];
a[j + 1] = t;
}
return;
}
p = a[(n + 1) >> 1];
for(i = -1, j = n;;) {
while(a[++i] < p);
while(a[--j] > p);
if(i >= j) break;
t = a[i];
a[i] = a[j];
a[j] = t;
}
if((n - i) > 1)
sort(a + i, n - i);
n = i;
goto re;
}
int main() {
int a[512], n = 512;
sort(a, n);
return 0;
}
void sort(int a[], int n) {
int i, j, t, p;
re: if(n < 32) {
for(i = 1; i < n; i++){
for(t = a[i], j = i - 1; j >= 0 && a[j] > t; j--)
a[j + 1] = a[j];
a[j + 1] = t;
}
return;
}
p = a[(n + 1) >> 1];
for(i = -1, j = n;;) {
while(a[++i] < p);
while(a[--j] > p);
if(i >= j) break;
t = a[i];
a[i] = a[j];
a[j] = t;
}
if((n - i) > 1)
sort(a + i, n - i);
n = i;
goto re;
}
int main() {
int a[512], n = 512;
sort(a, n);
return 0;
}
No comments:
Post a Comment