📜  堆排序的C++程序(1)

📅  最后修改于: 2023-12-03 14:51:37.748000             🧑  作者: Mango

堆排序的C++程序介绍

简介

堆排序是一种基于堆数据结构的排序算法。在堆排序中,我们将序列按照大小建立成一个大根堆或小根堆,然后再以此为基础进行排序。

堆排序的时间复杂度为 $O(nlogn)$,同时它也是一种原地排序算法。

实现

以下是使用C++语言实现堆排序的程序代码:

#include <iostream>
using namespace std;

void heapify(int arr[], int n, int i) 
{ 
    int largest = i; 
    int l = 2*i + 1; 
    int r = 2*i + 2; 
 
    if (l < n && arr[l] > arr[largest]) 
        largest = l; 
 
    if (r < n && arr[r] > arr[largest]) 
        largest = r; 
 
    if (largest != i) 
    { 
        swap(arr[i], arr[largest]); 
        heapify(arr, n, largest); 
    } 
} 
 
void heapSort(int arr[], int n)
{ 
    for (int i = n / 2 - 1; i >= 0; i--) 
        heapify(arr, n, i); 
 
    for (int i=n-1; i>=0; i--) 
    { 
        swap(arr[0], arr[i]); 
        heapify(arr, i, 0); 
    } 
} 
 
void printArray(int arr[], int n) 
{ 
    for (int i=0; i<n; ++i) 
        cout << arr[i] << " "; 
 
    cout << "\n"; 
} 
 
int main() 
{ 
    int arr[] = {12, 11, 13, 5, 6, 7}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
 
    heapSort(arr, n); 
 
    cout << "Sorted array is \n"; 
    printArray(arr, n); 
} 
代码解析

该程序使用了heapify函数来维护一个堆。在初始时,我们首先将数组构建成一个堆,然后进行堆排序,最后输出排好序的数组。

heapSort函数中,我们首先对初始的数组进行堆化,然后不断地将堆顶元素和堆底元素交换,再重新堆化,直到数组排好序。

printArray函数为输出数组的函数,其中的for循环遍历数组并输出。

总结

通过本文的介绍,我们可以知道堆排序是一种基于堆数据结构的排序算法,它的时间复杂度为 $O(nlogn)$,同时也是一种原地排序算法。

如果想对堆排序有更深入的了解,建议去学习堆数据结构及其实现。