堆排序

来源:互联网 发布:mac 彻底关机 编辑:程序博客网 时间:2024/06/03 16:03


#include<stdio.h>void AdjustHeap(int A[], int i, int n) {    int j, tmp, tmpid;    for( ; i * 2 + 1 < n; i++) {        if(i * 2 + 2 >= n) {            tmp = A[i * 2 + 1];            tmpid = i * 2 + 1;        }        else if (A[i * 2 + 1] > A[i * 2 + 2]) {            tmp = A[i * 2 + 1];            tmpid = i * 2 + 1;        }        else {            tmp = A[i * 2 + 2];            tmpid = i * 2 + 2;        }        if(tmp > A[i]) {             A[tmpid] = A[i];             A[i] = tmp;                       }    }}void MakeHeap(int A[], int n) {    int i;    for(i = n/2; i >= 0; i--) {        AdjustHeap(A, i, n);    }}void HeapSort(int A[], int n) {    int i, tmp;    for(i = 0; i < n; i++) {        tmp = A[n - i - 1];        A[n - i - 1] = A[0];        A[0] = tmp;        AdjustHeap(A, 0, n - i - 1);    }}void main() {    int A[] = {2, 4, 5, 6, 7, 8, 1, 3};    int n = 8;    MakeHeap(A, n);    int i;    for(i = 0; i < n; i++) printf("%d ", A[i]);    printf("\n");    HeapSort(A, n);    for(i = 0; i < n; i++) printf("%d ", A[i]);    printf("\n");}


0 0
原创粉丝点击