前提
ヒープソートを実装したいです。
実現したいこと
発生している問題・エラーメッセージ
535 725 649 643 963 393 279 188 166 163
該当のソースコード
C++
#include<bits/stdc++.h>using namespace std;#include<time.h> void pushdown(vector<int>&A, int first, int last){ int i = first; while(i <= (last-1) / 2){ int j; if(A[(2*i+1)] < A[(2*i+2)]){ //小さいほうの子の番号 j = (2*i+1); } else j = (2*i+2); if(A[j] < A[i]){ //子が親より小さかった場合 swap(A[i], A[j]); i = j; } else return; }} void HeapSort(vector<int>&A){ int n = A.size(); vector<int> B; for(int irev = 0; irev <= n/2; irev++) { int i = n/2 - irev; pushdown(A, i, n-1); } for(int irev = 1; irev <= n-1; irev++){ int i = n - irev; swap(A[0], A[i]); pushdown(A, 0, i-1); } } int main(){ vector<int> a = {963,643,163,535,725,188,649,279,393,166}; HeapSort(a); for (int i = 0; i< 10; i++){ cout << a[i] << " "; }}
試したこと
サンプルコードを参照しながら怪しい部分を書き換えました。
0 コメント