Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <vector>
- using namespace std;
- // Skilgreiningar:
- void hruga(vector<int>&, int, int);
- bool minna(vector<int>&, int, int);
- void exchange(vector<int>&, int, int);
- void heapsort(vector<int>& v) {
- int n = v.size();
- for (int k=n/2; k>=1; k--)
- hruga(v, k, n);
- while (n > 1) {
- exchange(v, 1, n--);
- hruga(v, 1, n);
- }
- }
- void hruga(vector<int>& v, int k, int n) {
- while (2*k <= n) {
- int j = 2*k;
- if (j<n && minna(v, j, j+1)) j++;
- if (!minna(v, k, j)) break;
- exchange(v, k, j);
- k = j;
- }
- }
- bool minna(vector<int>& v, int i, int j) {
- return v[i-1] < v[j-1];
- }
- void exchange(vector<int>& v, int i, int j) {
- int swap = v[i-1];
- v[i-1] = v[j-1];
- v[j-1] = swap;
- }
- /////////////////////////////////////////////////////
- bool issorted(vector<int>& v) {
- /*
- * Athugar hvort vigurinn v sé í stígandi röð
- */
- cout << endl;
- for (int i = 1; i < v.size(); i++) {
- if (v[i] < v[i - 1]) {
- return false;
- }
- }
- return true;
- }
- int main() {
- // Prófum sort á vigrum af lengdunum 0, 101, og 1000:
- vector<int> sizes = {0, 101, 1000};
- for (int n : sizes) {
- // Upphafstillum v með tölunum 0 upp í n-1 í slembinni röð
- vector<int> v(n);
- for (int i = 0; i < n; i++) {
- v[i] = i;
- }
- random_shuffle(v.begin(), v.end());
- // Röðum v aftur
- heapsort(v);
- // Athugum hvort röðunin tókst
- if (issorted(v)) {
- cout << "Röðun á " << v.size() << " staka vigri tókst" << endl;
- } else {
- cout << "Röðun á " << v.size() << " staka vigri mistókst" << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment