cukddcukdd.blog.chinaunix.net
CUKdd
一个有目标,为自己的未来努力奋斗的人
全部博文(73)
2015年(9)
2014年(2)
2013年(6)
2012年(11)
2011年(33)
2010年(12)
pzm0729
qiangh04
梦醒潇湘
peter2c2
natars
chenshko
czxyz222
hjshajsh
浮初2021
jeffasda
wb123456
Mr_yang
misae
lpangel
rhinux
分类: C/C++
2011-04-10 02:30:55
typedef int element; struct node { element key; }; typedef struct node ARRAY; void swap(element *A, element *B) { element tmp = *A; *A = *B; *B = tmp; } /* The index of ARRAY is start from zero */ void pushdown(int first, int last, ARRAY *A) { int r = first<<1; while(r+1 <= last) { if ((r+1 == last) && last%2==1 && A[first].key > A[r+1].key) { swap(&A[first].key, &A[r+1].key); first <<= 1; } else if (r+2 <= last && A[first].key > A[r+2].key && A[r+1].key > A[r+2].key) { swap(&A[first].key, &A[r+2].key); first = (first<<1) + 2; } else if (r+2 <= last && A[first].key > A[r+1].key && A[r+1].key <= A[r+2].key) { swap(&A[first].key, &A[r+1].key); first = (first<<1) + 1; } else { /* in this case, we do nothing */ r = last; continue; } r = first<<1; } } void heap_sort(ARRAY *A, int n) { int i = 0; /* init the heap */ for (i=n/2;i>=0;i--) { pushdown(i, n-1, A); } for(i=1;i<n;i++) { swap(&A[0].key, &A[n-i].key); pushdown(0, n-i-1, A); } }
上一篇:高效产生无重复随机数的算法
下一篇:归并排序 -- merge sort -- C source code
登录 注册