Problem z funkcją co jest nie tak?

0
#include<iostream>

void sort_index(int *tab, int n)
{
    int *index, a,b, poz_w_index;

    index=new int[n];
    for(a=0;a<n;a++)
    {
        poz_w_index=0;
        for(b=0;b<n;b++)
        {
            if (tab[b]<tab[a]) poz_w_index++;
            else if ((b<a) && (tab[b]==tab[a])) poz_w_index++;
        }
        index[poz_w_index]=a;
    }
        delete [] index;
}

int main(){
  int *d, n;

  std::cin>>n;
  d = new int[n];

  for(int i = 0; i < n; i++) std::cin>>d[i];

  sort_index(d, n);

  for(int i = 0; i < n; i++) std::cout << d[i];
  delete [] d;
  return 0;
}

Już sam nie wiem co jest nie tak, niby algorytm jest okay, ale nie sortuje mi n zbioru elementów... :/ Ma ktoś pomysł co jest nie tak?

0
index=new int[n];

okej, mamy tablicę dynamiczną...

index[poz_w_index]=a;

tutaj ją wypełniamy

delete [] index;

tu ją (prawidłowo) usuwamy...

...ale gdzie chcesz mieć rezultat, skoro go niszczysz?

0
#include<iostream>

void sort_index(int *tab, int n)
{
        int *index, a,b, poz_w_index;

        index=new int[n];
        for(a=0;a<n;a++)
        {
                poz_w_index=0;
                for(b=0;b<n;b++)
                {
                        if (tab[b]<tab[a]) poz_w_index++;
                        else if ((b<a) && (tab[b]==tab[a])) poz_w_index++;
                }
                index[poz_w_index]=a;
        }
}

int main(){
  int *d, n;

  std::cin>>n;
  d = new int[n];

  for(int i = 0; i < n; i++) std::cin>>d[i];

  sort_index(d, n);

  for(int i = 0; i < n; i++) std::cout << d[i];
  delete [] d;
  return 0;
}

Dzięki za odp. Już sam nie wiem..
Może ktoś wie jak poprawić kod tak aby poprawnie sortował?

0

Dodam jeszcze, że funkcję główną int mian() nie mogę zmieniać, ew. funkcję sort_index()

0
void sort_index(int *tab, int n)
{
        int *index, a,b, poz_w_index;

        index=new int[n];
        for(a=0;a<n;a++)
        {
                poz_w_index=0;
                for(b=0;b<n;b++)
                {
                        if (tab[b]<tab[a]) poz_w_index++;
                        else if ((b<a) && (tab[b]==tab[a])) poz_w_index++;
                }
                index[poz_w_index]=a;
        }
}

Do tablicy index wpisujesz jakieś wartości z którymi nic nie robisz, a z tablicy tab tylko odczytujesz.
Ten kod nic sensownego nie robi.

0
int sort_index(int *tab, int n){
    int *index, *posortowana, a, b, poz_w_index;

    index=new int[n];

    for(a=0;a<n;a++){
        poz_w_index=0;
        for(b=0;b<n;b++){
            if (tab[b]<tab[a]) poz_w_index++;
            else if ((b<a) && (tab[b]==tab[a])) poz_w_index++;
        }
        index[poz_w_index]=a;
    }

    posortowana=new int[n];
    for(a=0;a<n;a++)
        posortowana[a]=tab[index[a]];

    delete []index;

    for(a=0;a<n;a++)
            tab[a] = posortowana[a];
}

O coś takiego mi chodzi, czy da się to rozwiązać tak żeby Od razu przypisać posortowane wartości to tab?

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