近期对几种常用的排序算法复习了一遍:源代码在Code::Blocks编辑环境下完成,运行正常,先来个堆排序算法: 伪代码如下: sort(A) { buildheap(A); for i=n-1 to 1 do { swap A[0] with A[i]; heapify(A,0,i); } } buildheap(A) { for i=n/2-1 to 0 do { heapify(A,i,n); } } heapify(A,idx,max) { left=2*idx+1; right=2*idx+2; if(left<max and A[left]>A[idx]) { largest=left; } else { largest=idx; } if(right<max and A[right]>A[largest]) { largest=right; } if(largest != idx) { swap A[i] and A[largst]; heapify(A,largest,max); } } C语言代码如下:在Code::Blocks环境下编译运行: #include <stdio.h> #define Length 10 int compare(int a,int b) { if(a>b) { return 0; } else if(a<b) { return 1; } else { return -1; } } void swap(int &a,int &b) { int tmp; tmp = a; a = b; b = tmp; } void heapify(int A[],int idx,int max) { int largest; int left_child = 2*idx+1; int right_child= 2*idx+2; if(left_child<max && compare(A[idx],A[left_child])==1) { largest = left_child; } else { largest = idx; } if(right_child<max && compare(A[largest],A[right_child])==1) { largest = right_child; } if(largest != idx) { swap(A[largest],A[idx]); heapify(A,largest,max); } } void buildheap(int A[]) { int i; for(i=Length/2-1;i>=0;i--) { heapify(A,i,Length); } } int main() { int A[Length] = {2,60,3,234,1,0,41234343,23,56,-23}; buildheap(A); int i,j; for(i=Length-1;i>=0;--i) { swap(A[0],A[i]); heapify(A,0,i); } for(j=0;j<Length;j++) { printf("%d/n",A[j]); } return 0; } (end)