排序算法
1.堆排序
void sift(vector<int> &arr, int low, int high) { int i = low, j = 2 * i; int temp = arr[i]; while (j <= high) { if (j < high && arr[j] < arr[j + 1]) { j++; } if (temp < arr[j]) { arr[i] = arr[j]; i = j; j = 2 * i; } else { break; } } arr[i] = temp; } void heapSort(vector<int> &arr) { int n = arr.size() - 1; if (n <= 1) { return; } for (int i = n / 2; i >= 1; i--) { sift(arr, i, n); } for (int i = n; i >= 2 ; i--) { swap(arr[1], arr[i]); sift(arr, 1, i - 1); } }
测试用例:
有效排序元素从1开始
vector<int> arr = {0, 3, 2, 4, 1, 7, 6 }; heapSort(arr);
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步