algorytm sortujący

0

:)

Chcę aby posortował od najmniejszego elemntu w tablicy do największego.
Problem w tym że nie wiem jak to do końca działa bo mi sortuje nie wszystkie liczy które podałem do tablicy
oraz wypisuje po sortowaniu jedno 0.


class Test2{
	private long[]a;
	private int nElems;
	
	public Test2(int max){
		a = new long[max];
		nElems = 0;
	}
	public void insert(long value){
		a[nElems] = value;
		nElems++;
	}
	public void display(){
		for(int j=0; j<nElems; j++)
			System.out.print(a[j] + ", ");
			System.out.println("");
	} 
	public void bubbleSort() {
		for(int k=nElems--; k>0; k--)
			for(int j=0; j<k; j++)
			if( a[j] >a[j+1])
				swap(j, j+1);
	}
	
	private void swap(int one, int two){
		long temp =a[one];
		a[one] = a[two];
		a[two] = temp;
	}				
					
	
}
	
	
	
class Test{
	public static void main(String args[]){
		int maxSize =100;
		Test2 p1;
		p1 = new Test2(maxSize);
		
		p1.insert(34);
			p1.insert(77);
			p1.insert(22);
		p1.insert(47);
		p1.insert(79);
		p1.insert(42);
		p1.insert(21);												
		p1.insert(41);	
		p1.insert(69);
		p1.insert(12);	
			
		p1.display();
		p1.bubbleSort();
		p1.display();
		
						
	}
}	
0

Coś sortowanie poknociłeś.
Tak będzie poprawnie:

public void bubbleSort() {
       for(int k=0;k < nElems;++k)
            for(int j=0; j < nElems - 1; j++)
                  if( a[j] >a[j+1])
                      swap(j, j+1);
 }
 
0

Twojego kodu nie testowałem ale , zamieniłem w kodzie
nElems-- na nElems-1.
Działa poprawnie tylko nie do końca rozumiem jak działa.

public void bubbleSort() {
		for(int k=nElems-1; k>0; k--)
			for(int j=0; j<k; j++)
			if( a[j] >a[j+1])
				swap(j, j+1);
	}

0

Zwykłe bąbelkowe - tak jak masz zresztą w nazwie metody.
GoogleIT!
QuickSorta sprawdź sobie przy okazji.

Nazwa pochodzi od skojarzenia ze elementy sortując się "wypychają" się do góry, tak jak bąbelek powietrza w wodzie - i faktycznie tak to wygląda. Wyobraź sobie ze masz elementy w kolumnie (w pionie).
Bierzesz drugi z góry (bo po cholere Ci pierwszy jak z niczym nie proównasz go) i poruwnujesz z tym wyżej. Jeżeli jest większy(niejszy - zależy jak sortujesz czy asc czy desc) to swap-zamieniasz miejscami.
Bierzesz trzeci teraz i robisz to samo co poprzednio ALE, sprawdzasz jeżeli nastąpiła zamiana, czy z kolejnym elementem(czyli w tm przypadku to będzie szczytowy) nie trzeba zamienić się równiesz.
Potem bierzesz czwarty itd itp;]

Z tego co widzę u Ciebie brakuje break; w wewnętrznej pętli bo nad obecnym elementem masz zawsze posortowane elementy, więc jeżeli z pierwszym nie trzeba było swapować to z kolejnymi też nie będzie trzeba.
Przy tablico 100 elementów nie zauważysz różnicy, ale przy 1000000< juz tak - ale do tego to sie quickSorta stosuje nie mumble bumble;]

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