赞
踩
堆排序
堆排序是一种基于二叉堆数据结构的排序算法,它的基本概念包括:
堆排序的时间复杂度为O(nlogn),它是一种不稳定的排序算法。
完全二叉树是一种特殊的二叉树,它的基本概念包括:
完全二叉树常常用于堆数据结构的实现,因为其特殊的性质使得堆操作更加高效。
堆排序cpp代码截图:
堆排序cpp代码:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string.h> #include <time.h> #include <sys/timeb.h> #define MAX 10 using namespace std; // 打印函数 void PrintArray(int arr[], int length) { for (int i = 0; i < length; i++) { cout << arr[i] << " "; } cout << endl; } // 交换函数 void MySwap(int arr[], int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } /* @param myArr 待调整的数组 @param index 待调整的节点下标 @param len 数组的长度 */ void HeapAdjust(int myArr[], int index, int len) { int max = index; // 保存当前节点的下标 int lchild = index * 2 + 1; int rchild = index * 2 + 2; if (lchild < len && myArr[lchild] > myArr[max]) { max = lchild; } if (rchild < len && myArr[rchild] > myArr[max]) { max = rchild; } if (max != index) { //交换两个节点 MySwap(myArr, max, index); HeapAdjust(myArr, max, len); } } // 堆排序的代码 void HeapSort(int myArr[], int len) { // 初始化堆:大顶堆,从小到大 for (int i = len / 2 - 1; i >= 0; i--) { HeapAdjust(myArr, i, len); } // 交换堆顶的元素和最后的元素 for (int i = len - 1; i >= 0; i--) { MySwap(myArr, 0, i); HeapAdjust(myArr, 0, i); } } int main() { int myArr[] = {4,2,8,0,5,7,1,3,9}; int len = sizeof(myArr) / sizeof(myArr[0]); PrintArray(myArr, len); // 堆排序 HeapSort(myArr, len); PrintArray(myArr, len); }
堆排序运行结果展示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。