排序算法
klbc
这个作者很懒,什么都没留下…
展开
-
原地堆排序(不占用额外空间)(C++实现)
原地堆排序,不占用额外空间 // 原地堆排序,不占用额外空间 template<typename T> void shiftDown(T data[], int n, int i) { using uint = unsigned int; uint k = i; while (2 * k + 1 < n) { uint j = 2 * k +1; if ((j +原创 2020-12-13 12:16:14 · 543 阅读 · 0 评论 -
利用vector存储元素(动态大小)实现最大堆(二叉堆)和堆排序(C++实现)
二叉堆是一颗完全二叉树,二叉堆中某个节点的值总是不大于(小于)其父节点的值,称为最大堆(最小堆),该实现从vector下标为0开始存储元素最大堆实现: // 利用vector存储实现堆,且从下标0位置开始存储元素 // parent(i) = (i-1)/2 // leftChild(i) = 2 * i + 1 // rightChild(i) = 2 * i + 2 // 最后一个非叶子节点索引为 (count-1) / 2, 其中 count 为原创 2020-12-13 11:59:09 · 236 阅读 · 0 评论 -
利用数组存储元素(固定大小)实现最大堆(二叉堆)和堆排序(C++实现)
二叉堆是一颗完全二叉树,二叉堆中某个节点的值总是不大于(小于)其父节点的值,称为最大堆(最小堆),该实现从数组下标为1开始存储元素,0位置预留不做处理,当然,完全可以从0开始存储元素,两者之间的差别就是求取某个节点的父节点、左右子节点以及最后一个非叶子节点的公式有所区别。最大堆实现: // 利用数组存储实现堆,且从数组下标1位置开始存储元素,0位置不存储有效元素 // parent(i) = i/2 // leftChild(i) = 2 * i // rightC原创 2020-12-13 11:54:20 · 488 阅读 · 0 评论 -
快速排序&三路快排(C++实现)
公共函数,用以测试数组相等namespace SortCommon { bool ArrEqual(int arr1[], int arr2[], int n) { for (int i = 0; i < n; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; }}快速排原创 2020-12-06 20:53:46 · 655 阅读 · 0 评论 -
归并排序和两个优化点(C++实现)
公共函数,用以测试数组相等namespace SortCommon { bool ArrEqual(int arr1[], int arr2[], int n) { for (int i = 0; i < n; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; }}归并过原创 2020-12-06 16:26:11 · 320 阅读 · 0 评论 -
冒泡排序和希尔排序(C++实现)
公共函数,用以测试数组相等namespace SortCommon { bool ArrEqual(int arr1[], int arr2[], int n) { for (int i = 0; i < n; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; }}冒泡排原创 2020-12-04 18:33:28 · 127 阅读 · 0 评论 -
选择排序和插入排序(C++实现)
公共函数,用以测试数组相等namespace SortCommon { bool ArrEqual(int arr1[], int arr2[], int n) { for (int i = 0; i < n; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; }}选择排原创 2020-12-04 16:50:06 · 593 阅读 · 0 评论