堆排序

来源:互联网 发布:手机怎样申请淘宝小号 编辑:程序博客网 时间:2024/06/02 04:44
// 堆排序void heap_sort(int A[LENGTH])//堆排序算法{int i;int heap_size;heap_size = LENGTH;build_max_heap(A);for(i = LENGTH; i > 0; i--){exchange(A, 0, i-1);heap_size--;max_heapify(A, 1, heap_size);}}void max_heapify(int A[LENGTH], int i, int heap_size)// 保证最大堆性质,对A[i-1]进行“下降”{int l, r;//左儿子和右儿子下标int largest;//最大值下标l = 2 * i - 1;r = 2 * i;if(l <= heap_size - 1 && A[l] > A[i-1])largest = l;elselargest = i - 1;if(r <= heap_size - 1 && A[r] > A[largest])largest = r;if(largest != i - 1){exchange(A, i - 1, largest);max_heapify(A, largest + 1, heap_size);}}void exchange(int A[LENGTH], int i, int j){int temp;temp = A[i];A[i] = A[j];A[j] = temp;}void build_max_heap(int A[LENGTH])//创建最大堆{int heap_size;int i, n;heap_size = LENGTH;n = floor((double)(LENGTH)/2);for(i = n; i > 0; i--)max_heapify(A, i, heap_size);}


0 0
原创粉丝点击