堆排序代码

简介: 堆排序代码
#include<iostream>
#include<cstring>
using namespace std;
int arr[10010];//要排序的数据
int n;//一共有多少数据
void Max_heap(int arr[], int first, int last){
    int par = first;
    int son = par * 2 + 1;
    while(son <= last){
        if(son + 1 <= last && arr[son] < arr[son + 1]){
            son++;
        }
        if(arr[par] > arr[son]){//如果满足,那么就直接返回
            return;
        }else{
            int temp = arr[par];
            arr[par] = arr[son];
            arr[son] = temp;//交换顺序
            par = son;
            son = par * 2 + 1;//再次进入循环
        }
    }
}
void heap_sort(int arr[], int len){
    for(int i = len / 2 - 1;i >= 0;i--){
        //从最后一个非叶子节点开始往回走
        Max_heap(arr, i, len-1);
    }//先排好形成大顶堆
    //下面代码:先将第一个元素和已经排好元素前一位作交换,再进行堆排序
    for(int i = len - 1;i > 0;i--){
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;
        Max_heap(arr, 0, i - 1);
    }
}
int main(){
    cin>>n;
    for(int i = 0;i < n;i++){
        cin>>arr[i];
    }
    heap_sort(arr, n);
    for(int i = 0;i < n;i++){
        cout<<arr[i]<<" ";
    }cout<<endl;
    return 0;
}
相关文章
|
4天前
|
算法
|
29天前
|
存储 算法 C语言
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
16 0
|
2月前
|
搜索推荐 Java
java实现冒泡排序和快速排序代码
java实现冒泡排序和快速排序
32 1
|
11月前
|
存储 算法 搜索推荐
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
195 0
|
2月前
|
算法 Java C++
归并排序代码实现
归并排序代码实现
21 0
|
2月前
|
存储 搜索推荐
常见排序算法原理及实现——第二部分(归并排序、快速排序、堆排序)
常见排序算法原理及实现——第二部分(归并排序、快速排序、堆排序)
|
2月前
|
人工智能 供应链 搜索推荐
①归并排序、快速排序 、堆排序、计数排序[算法、代码模板、面试题]
①归并排序、快速排序 、堆排序、计数排序[算法、代码模板、面试题]
64 0
|
11月前
|
存储 算法 搜索推荐
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)1
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)1
150 0

热门文章

最新文章