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