堆排序C++實現

來源:互聯網
上載者:User

標籤:

//堆排序C++實現#include<iostream>#include<functional>using namespace std;void HeapSort(int* arr, int cnt){function<void(int*, int, int)> percdown = [&](int* arr, int i, int cnt)  //下濾操作{int child = 0, tmp = 0;for (tmp = arr[i]; 2 * i + 1 < cnt; i = child){child = i * 2 + 1;if (child != cnt - 1 && arr[child + 1] > arr[child])child++;if (tmp < arr[child])arr[i] = arr[child];elsebreak;}arr[i] = tmp;};for (int i = (cnt-1) / 2; i >= 0; i--)   //從最後一個元素的父節點開始一個一個的下濾,構建堆 注意:這裡的i = cnt 或 cnt -1 均可,可以自行畫圖解釋percdown(arr, i, cnt);for (int i = cnt - 1; i > 0; i--)   //把構建好的堆進行排序{swap(arr[0], arr[i]);percdown(arr, 0, i);}}int main(){const int cnt = 1159;int arr[cnt];int tmp = -1;for (int i = 0; i < cnt; i++){if (i % 2)arr[i] = i;elsearr[i] = i * tmp;}HeapSort(arr, cnt);for (auto i : arr)cout << i << endl;for (int i = 0; i < cnt-1; i++){if (arr[i]  > arr[i + 1])cout << "haha" << endl;}cout << "test end" << endl;cin.get();return 0;}

堆排序C++實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.