[ Ivan_81 @ 30.04.2005. 00:05 ] @
moze li mi neko pomoci oko ovog java coda, naime moram da napisem quicksort algoritam u javi , za pivot element treba da uzme zadnji odnosno desni element, ali nekako da mi krene odnsno da code proradi , pa ako mi moze neko pomoci ili barem ukazati gde mi je greska? kako to da uradim? posto treba do nedelje da predam jos par verzija tog quicksorta , ali im se samo pivot element menja a ostalo osaje isto. Pa vas zato ja molim za pomoc ako je neko spreman i zna da mi pomogne, bio bi mu veoma zahvalan. Unapred hvala

static int quicksort3 (String [][] records, int left, int right) {
// Quicksort-Algorithmus
int i,j,counter;
String pivot,temp;
String [][] m = new String [1][3];
i = left -1;
j = right;
counter= 42;
if (right>left){
//String tmp = null;
//i = left - 1;
//j = right ;
pivot = records[j][0];
counter += 4;
while(i<j) {
do i++; while(records[0].compareTo(pivot)< 0 && records[0].compareTo(records[j][0])<0 );
System.out.println(i);
counter +=45;

do j--; while(records[j][0].compareTo(pivot)>=0 && j >i );
System.out.println(j);
counter +=44;
if (i >= j){
pivot = records[0] ;
counter +=4;
break;}

temp = records[0];
records[0]=records[j][0];
records[j][0]= temp ;
counter +=6;
}
temp = records[0];
records[0]= records[right][0];
records[right][0]= temp ;
counter +=86;}
quicksort3(records,left,i-1);
quicksort3(records,i+1,right);

return counter; // You should return the value of the execution time counter here
}
[ jandrla @ 30.04.2005. 13:21 ] @
Stvarno ne mogu da se bakcem sa kodom, ali mogu da ti dam
jedan od najstandardnijih kodova za quicksort, pa se
nadam da ce ti posluziti.
Pozdrav.

import java.io.*;

public class quicksort
{

/* Metod partition particionise deo niza na intervalu [l, r]
tako da je uredjen na sledeci nacin:
elementi koji su manji od pivota smestaju se levo
od njega a elementi koji su veci desno.
Za pivot se uzima krajnji desni element intervala. */
public static int partition(String[] a, int l, int r)
{
String temp;
int first;


first = r; // Cuva indeks prvog elementa koji je veci od pivota.
for(int i = r - 1; i >= l; i--)
if(a.compareTo(a[r]) > 0)
{
first--;

temp = a;
a = a[first];
a[first] = temp;
}

/* Ostalo je jos umetnuti pivot element na svoje mesto.
Indeks na kom treba da se umetne element sacuvan je
u promenljivoj first. */
temp = a[first];
a[first] = a[r];
a[r] = temp;

return first;
}

public static void quicksort(String[] a, int l, int r)
{
if(l >= r)
return;

int pivot = partition(a, l, r);

quicksort(a, l, pivot - 1);
quicksort(a, pivot + 1, r);
}

public static void main(String[] args)
{
String[] a = {"G", "D", "E", "F", "C", "A", "B"};
int n = a.length;

quicksort(a, 0, n - 1);

for(int i = 0; i < n; i++)
System.out.println(a + " ");
}
}



[ jandrla @ 30.04.2005. 13:24 ] @
Ne znam sta se desilo prilikom Copy - Paste - a, ali poslednji
println treba da izgleda ovako:
System.out.println(a + " ");
a ne
System.out.println(a + " ");
[ jandrla @ 30.04.2005. 13:27 ] @
Opet isto, nesto cudno se desava.
a[ i ] umesto a.
[ Ivan_81 @ 30.04.2005. 18:35 ] @
Sredio sam taj primer nekako , hvala na pomoci. Ali sada imam sledeci problem treba da uradim isti algoriman ali koji ce da da uzmeprvi zadnji i srednji element i od njih da nadje naj veci i da ga postavi u sredini i odatle da pocne da ga deli. a imam dve liste to su [0] i [1] . I sada mi je proble oko nalazenja srednje vrednosti, ja sam to napisao ja elemente [0] i [j][0] , ali kako mogu to sada naj bolje preneti na [1] i [j][1] a da ne moram da pisem ceo kod za [1] i [j][1] . Molim nekog ako moze da mi pomogne da mi nipaise ili da mi objasni kako da prenesem to da vazi i za [1] i [j][1] , Unapred hvala
a moj code je sledeci :

if (records[0].compareTo(records[median][0])> 0) {
temp = records[0];
records[0] = records[median][0];
records[median][0] = temp ;
counter += 6 ;
}
if (records[0].compareTo(records[j][0])> 0){
temp = records[0];
records = records[j];
records[j][0] = temp ;
counter += 6 ;
}
else if (records[j][0].compareTo(records[median][0])>0){
temp = records[j][0];
records[j][0] = records[median][0] ;
records[median][0] = temp ;
counter += 6 ;
}
pivot = records[median][0];
pivot1 = records[median][1];