堆排序

#include <stdio.h>
#include <stdlib.h>


void show(int *p, int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%4d", p[i]);
    }
    printf("\n");
}

void findMax(int *arr,int size)
{
    for (int j = size - 2; j>0; j--)//从尾循环到头部
    {
        int parent = j / 2;//父节点位置
        int child = j;//记录当前下标

        if (j < size - 1 && arr[j] < arr[j + 1])
        {
            child++;
        }

        if (arr[child]>arr[parent])//最大值登顶
        {
            int temp = arr[child];
            arr[child] = arr[parent];
            arr[parent] = temp;
        }
    }
}

void heapSort(int *arr, int size)
{
    for (int j = size; j > 0; j--)
    {
        findMax(arr, j);
        //找到一个最大的放在最后 然后交换 然后再找到一个最大的放在最后
        int temp = arr[0];
        arr[0] = arr[j - 1];
        arr[j - 1] = temp;
    }
}

void main()
{
    int a[10] = { 10, 13, 20, 12, 30, 14, 50, 196, 60 ,29};
    show(a, 10);
    heapSort(a, 10);
    show(a,10);

    system("pause");
}

 

posted @ 2016-02-06 18:25  喵小喵~  阅读(203)  评论(0)    收藏  举报