Sortowanie przez kopcowanie - błąd dotycząćy funkcji "swap"

0
#include <iostream.h>
#include <iomanip>
#include <cstdlib>
#include <time.h>
#include <algorithm>

int main(void)
{
    int i, j, k, m, x, r, w;
    int *tab=new int [r];
    cout<<"Wprowadz rozmiar tablicy:"<<" "<<endl; // Zmienna r deklaruje rozmiar kopca => rozmiar tablicy
    cin>>r;
    for(i=1;i<=r;i++) // Wypełniamy tablicę liczbami wybranymi przez użytkownika, całkowitymi!!
    {
                     cout<<"Wprowadz liczbe do kolumny numer"<<" "<<i<<endl;
                     cin>>w;
                     tab[i]=w;
    }
    // ZACZYNAM BUDOWAĆ KOPIEC!!
    for(i=2;i<=r;i++)
    {
                     j=i;k=j/2; //j=i To jest tablica pomocnicza, natomiast k=j/2 jest to tablica pomocniczna podzielona na pół.
                     x=tab[i]; // Zmienna "x" określa bieżącą, zdeklarowaną na samym początku tablicę.
                     while((k>0) && (tab[k]<x)) // Dopóki k>0 i połowa tablicy tab[k] mniejsza od rozmiaru tablicy pierwotnej wykonuj:
                     {
                                 tab[j]=tab[k];
                                 j=k;k=j/2;
                     }
                     tab[j]=x;
    }
    
    // ROZBIERAMY KOPIEC!!
    for(i=r;i>1;i--)
    {
                    swap(tab[1], tab[i]);
                    j=1;k=2;
                    while(k<i)
                    {
                              if((k+1<i) && (tab[k+1]>tab[k]))
                              m=k+1;
                              else
                              m=k;
                              if(tab[m]<=tab[j]) break;
                              swap(tab[j], tab[m]);
                              j=m; k=j+j;
                    }
    }
    
    cout<<"Po sortowaniu:"<<endl;
    for(i=1;i<=r;i++)
    {
                     cout<<" "<<tab[i]<<endl;
                     //cout<<endl;
    }
                     
    system("PAUSE");
    return 0;
}
 

Błąd tyczy się swapa'a i brzmi on:

`swap' undeclared (first use this function)

Nie wiem co jest nie tak...

Pozdrawiam!

Dodam tylko, że gotowy algorytm działa - ale w nim jest z góry ustalona liczebność zbioru. Moja modyfikacja polega na tym, że to użytkownik ustala ile i co ma być w tablicy.

Pozdrawiam!

0

funkcja ta ma zamieniać miejscami dwa elementy tablicy

dodaj do programu

void swap(int * a, int * b){
    int t=*a; *a=*b; *b=t;
}

zmień wywołania na swap(&tab[x], &tab[y])
dodaj znaczki &

0

masz źle nagłówki

#include <iostream.h>
#include <iomanip>
#include <cstdlib>
#include <time.h>
#include <algorithm>

daj tak:

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <algorithm>
using namespace std;

i swap powinien być widoczny.

0

Tablice dynamiczne nie zmieniają rozmiaru! No i co, że wpiszesz cos do r, skoro już tablica ma rozmiar?
Zresztą, w momencie przydzielania pamięci do tab, pomyśl, jaką ma r wartość?

1 użytkowników online, w tym zalogowanych: 0, gości: 1