堆排序

作者: 落入粪池的凤凰 | 来源:发表于2019-11-07 17:39 被阅读0次
image

void heapSort(int arr[],int length);
void unitHeapSort(int arr[],int index,int length);
void swap(int arr[],int a,int b);
void printLog(int arr[]);

int main(int argc, char * argv[])
{
    int arr[10] = {1,3,9,8,7,2,6,5,4,};
    heapSort(arr, 9);
    printLog(arr);
}

void heapSort(int arr[],int length){
    //构建大顶堆
    for(int i = length/2-1;i>=0;i--){
        unitHeapSort(arr,i,length);
    }
    
    printLog(arr);
    
    //替换最大值与最小值,然后再重新构建大顶堆
    for(int j = length-1;j>0 ;j--){
        swap(arr, 0, j);
        unitHeapSort(arr, 0, j-1);
        printLog(arr);
    }
}

void unitHeapSort(int arr[],int index,int length){
    int leftIndex = index*2 + 1;
    if(leftIndex>length) return;
    //默认指向左侧
    int maxIndex = leftIndex;
    int rightIndex = leftIndex + 1;
    //如果右侧比左侧大则指向右侧
    if(rightIndex<length&&arr[leftIndex]<arr[rightIndex]){
        maxIndex = rightIndex;
    }
    //如果子节点大于父节点,交换位置
    if(arr[maxIndex]>arr[index]){
        swap(arr,maxIndex,index);
        unitHeapSort(arr, maxIndex, length);
    }
}


void swap(int arr[],int a,int b){
    int temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}


void printLog(int arr[]){
    for (int i =0;i<9; i++) {
        printf("%d ",arr[i]);
    }
    printf("\n");
}

输出:
9 8 6 5 7 2 1 3 4 
8 7 6 5 4 2 1 3 9 
7 5 6 3 4 2 1 8 9 
6 5 2 3 4 1 7 8 9 
5 3 2 1 4 6 7 8 9 
4 3 2 1 5 6 7 8 9 
3 1 2 4 5 6 7 8 9 
2 1 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 

相关文章

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序

    原创 堆排序: 使用visit数组从本质出发获取大顶堆排序。

  • 堆排序

    堆排序

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

网友评论

      本文标题:堆排序

      本文链接:https://www.haomeiwen.com/subject/osbvbctx.html