前提
ヒープソートを実装したいです。
実現したいこと
発生している問題・エラーメッセージ
535 725 649 643 963 393 279 188 166 163
該当のソースコード
C++
1#include<bits/stdc++.h> 2using namespace std; 3#include<time.h> 4 5void pushdown(vector<int>&A, int first, int last){ 6 int i = first; 7 while(i <= (last-1) / 2){ 8 int j; 9 if(A[(2*i+1)] < A[(2*i+2)]){ //小さいほうの子の番号 10 j = (2*i+1); 11 } 12 else j = (2*i+2); 13 if(A[j] < A[i]){ //子が親より小さかった場合 14 swap(A[i], A[j]); 15 i = j; 16 } 17 else return; 18 } 19} 20 21void HeapSort(vector<int>&A){ 22 int n = A.size(); 23 vector<int> B; 24 for(int irev = 0; irev <= n/2; irev++) { 25 int i = n/2 - irev; 26 pushdown(A, i, n-1); 27 } 28 for(int irev = 1; irev <= n-1; irev++){ 29 int i = n - irev; 30 swap(A[0], A[i]); 31 pushdown(A, 0, i-1); 32 } 33} 34 35int main(){ 36 vector<int> a = {963,643,163,535,725,188,649,279,393,166}; 37 HeapSort(a); 38 for (int i = 0; i< 10; i++){ 39 cout << a[i] << " "; 40 } 41}
試したこと
サンプルコードを参照しながら怪しい部分を書き換えました。
補足情報(FW/ツールのバージョンなど)
アップヒープが無く、私の知っているヒープソートとは違うように見えますが、元にしたサンプルコードはどこにありますか?
回答1件