sortowanie bąbelkowe - nieprawidłowe wyświetlanie zawartości tablicy

sortowanie bąbelkowe - nieprawidłowe wyświetlanie zawartości tablicy
adrian.widzew
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 149
0

Witam.
Otóż mam pytanie dotyczące sortowania bąbelkowego.
Mam taki kod:

Kopiuj
#include <iostream>
#include<conio.h>
using namespace std;
int main(){
	int wielkosc_tablicy;
	int suma=0;
cout<<"Podaj wielkosc tablicy: ";
cin>>wielkosc_tablicy;
int tablica[wielkosc_tablicy];
for(int i=0; i<wielkosc_tablicy; i++){
	cout<<"Podaj "<<i+1<<" element tablicy: ";
	cin>>tablica[i];

}
for(int i=0; i<wielkosc_tablicy; i++){
	for(int j=0; j<wielkosc_tablicy; j++){
		if(tablica[j]>tablica[j+1]){
			swap(tablica[j], tablica[j+1]);
		}
	}
}
for(int i=0; i<wielkosc_tablicy; i++){
	cout<<tablica[i]<<endl;
}
    return 0;
}

Jest problem z wypisaniem zawartości tablicy. Gdy j<wielkosc_tablicy; lub i<wielkosc_tablicy; tonajwyższej liczby nie wyświetla, tylko zamiast niej jest wypisane zero. jeżeli napisze j<=wielkosc_tablicy; lub i<=wielkosc_tablicy; to oprócz tych liczb które użytkownik podał dodaje dodatkowe zero. To dodatkowe zero jest przez warunek mniejsze lub równe, ale wtedy wyświetli całą zawartość tablicy. Więc jak zrobić, żeby wyświetlało całą tablicę, bez dodawania zera, i bez zjadania jednej największej liczby z tablicy, zamiast której wstawia zero

JE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0
Kopiuj
for(int j=0; j<wielkosc_tablicy; j++){
                if(tablica[j]>tablica[j+1]){
                        swap(tablica[j], tablica[j+1]);
                } 

Przy ostatnim obiegu pętli wybiegasz poza zakres tablicy poprzez

Kopiuj
  swap(tablica[j], tablica[j+1]);  
adrian.widzew
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 149
0

A jak to naprawić?

adrian.widzew
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 149
0

Dobra. Jakoś udało mi się to zrobić.

Kopiuj
for(int j=0; j<wielkosc_tablicy; j++){
	
		if(tablica[j]-1>tablica[j]){
			swap(tablica[j-1], tablica[j]);
		}
}
for(int i=0; i<wielkosc_tablicy; i++){
	cout<<tablica[i]<<endl;
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
for(int j=1;j<wielkosc_tablicy;++j) if(tablica[j-1]>tablica[j]) swap(tablica[j-1],tablica[j]); // zaczynamy od 1, tablica[j]-1 to nie to samo co tablica[j-1]
for(int i=0;i<wielkosc_tablicy;++i) cout<<tablica[i]<<endl;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.