Sortowanie z rosnącego na malejące

0

Witam, mam tutaj kod z sortowaniem rosnącym. Jak przerobić go na sortowanie malejące?`````

#include <cstdlib>
#include <ctime>

using namespace std ;

int losowa(int tab[], int n){
	srand(time(0));
	for (int i=0; i < n; i++)
	tab[i] = rand() % 100; 
	return 0;
}
int drukuj(int tab[], int n){
	for (int i=0; i < n; i++)
	cout<<tab[i]<<" ";
	cout<<endl;
	return 0;
}

int sortWstaw(int tab[], int n){
	int i, j, x, r=0;
	
	for(j = n - 2; j >= 0; j--){
    	x = tab[j];
   		i = j + 1;
    	while((i < n) && (x > tab[i])){
      		tab[i - 1] = tab[i];
      		i++;
  	r++;
    	}
    tab[i - 1] = x;
    }
	cout << "'" << r << "'";
	return 0;
}

int main ( ) {
const int N=100;	
int A[N];

losowa(A, N);
cout<<"Tablica przed posortowaniem:"<<endl;
drukuj(A, N);
cout<<endl;
sortWstaw(A, N);
cout<<"Tablica po posortowaniu:"<<endl;
drukuj(A, N);

return 0;

}```

0

To zależy, czy sam to pisałeś, czy kupiłeś / pozyskałeś

0

Wystarczy zamienić jeden znak na jego symetryczne odbicie względem pionowej osi.

0
TomaszLiMoon napisał(a):

Wystarczy zamienić jeden znak na jego symetryczne odbicie względem pionowej osi.

a w którym miejscu dokładnie?

0

a w którym miejscu dokładnie?

To co powinieneś zrobić, to zmienić znak nierówności, w miejscu w którym porównywalne są elementy tablicy.

3

@Druid33 nie da się niestety tego zrobić. Sortowanie rosnące oraz malejące to dwa zupełnie różne algorytmy. Musisz poszukać albo napisać ten drugi, z tego niestety nic będzie :(

1

Standardowa technika:

int sortujodwrotnie(int tab[], int n) {
    for (int i = 0; i < n; ++i) {
         tab[i] *= -1;
    }
    sortWstaw(tab, n);
    for (int i = 0; i < n; ++i) {
         tab[i] *= -1;
    }
}

Niestety czasem nie działa, jak masz za małe liczby

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