1. 程式人生 > >堆排序_C實現

堆排序_C實現

#include<stdio.h>

//向下調整 
void HeapAdjust(int A[], int low, int high){
    int i, temp = A[low];
    for(i = low * 2; i < high; i *= 2){
        if(i < high && A[i] < A[i+1])
            i++;
        if(A[i] <= temp)
            break;
        else{
            A[low] = A[i];
            low 
= i; } } A[low] = temp; } void HeapSort(int A[], int n){ int i, temp; //建堆 for(i = n/2; i > 0; i--) HeapAdjust(A, i, n); //將最大值放至陣列末端 for(i = n-1; i > 0; i--){ temp = A[1]; A[1] = A[i+1]; A[i+1] = temp; HeapAdjust(A, 1 ,i); } }
int main(){ int A[16]={0,5,6,4,3,2,6,4,4,6,5,3,22,6,1,-23}; HeapSort(A, 16); for(int i=1; i<=15; i++) printf("%d ", A[i]); return 0; }