2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,58 +1,50 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define ValType double
|
||||
#define IS_LESS(v1, v2) (v1 < v2)
|
||||
|
||||
void siftDown( ValType *a, int start, int count);
|
||||
|
||||
#define SWAP(r,s) do{ValType t=r; r=s; s=t; } while(0)
|
||||
|
||||
void heapsort( ValType *a, int count)
|
||||
{
|
||||
int start, end;
|
||||
|
||||
/* heapify */
|
||||
for (start = (count-2)/2; start >=0; start--) {
|
||||
siftDown( a, start, count);
|
||||
int max (int *a, int n, int i, int j, int k) {
|
||||
int m = i;
|
||||
if (j < n && a[j] > a[m]) {
|
||||
m = j;
|
||||
}
|
||||
if (k < n && a[k] > a[m]) {
|
||||
m = k;
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
for (end=count-1; end > 0; end--) {
|
||||
SWAP(a[end],a[0]);
|
||||
siftDown(a, 0, end);
|
||||
void downheap (int *a, int n, int i) {
|
||||
while (1) {
|
||||
int j = max(a, n, i, 2 * i + 1, 2 * i + 2);
|
||||
if (j == i) {
|
||||
break;
|
||||
}
|
||||
int t = a[i];
|
||||
a[i] = a[j];
|
||||
a[j] = t;
|
||||
i = j;
|
||||
}
|
||||
}
|
||||
|
||||
void siftDown( ValType *a, int start, int end)
|
||||
{
|
||||
int root = start;
|
||||
|
||||
while ( root*2+1 < end ) {
|
||||
int child = 2*root + 1;
|
||||
if ((child + 1 < end) && IS_LESS(a[child],a[child+1])) {
|
||||
child += 1;
|
||||
}
|
||||
if (IS_LESS(a[root], a[child])) {
|
||||
SWAP( a[child], a[root] );
|
||||
root = child;
|
||||
}
|
||||
else
|
||||
return;
|
||||
void heapsort (int *a, int n) {
|
||||
int i;
|
||||
for (i = (n - 2) / 2; i >= 0; i--) {
|
||||
downheap(a, n, i);
|
||||
}
|
||||
for (i = 0; i < n; i++) {
|
||||
int t = a[n - i - 1];
|
||||
a[n - i - 1] = a[0];
|
||||
a[0] = t;
|
||||
downheap(a, n - i - 1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
int ix;
|
||||
double valsToSort[] = {
|
||||
1.4, 50.2, 5.11, -1.55, 301.521, 0.3301, 40.17,
|
||||
-18.0, 88.1, 30.44, -37.2, 3012.0, 49.2};
|
||||
#define VSIZE (sizeof(valsToSort)/sizeof(valsToSort[0]))
|
||||
|
||||
heapsort(valsToSort, VSIZE);
|
||||
printf("{");
|
||||
for (ix=0; ix<VSIZE; ix++) printf(" %.3f ", valsToSort[ix]);
|
||||
printf("}\n");
|
||||
int main () {
|
||||
int a[] = {4, 65, 2, -31, 0, 99, 2, 83, 782, 1};
|
||||
int n = sizeof a / sizeof a[0];
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
|
||||
heapsort(a, n);
|
||||
for (i = 0; i < n; i++)
|
||||
printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue