no wlaśnie tak też myślałem ze nie da rady z tym bąbelkowym coś zrobić..
tak na szybko by uniknąć od początku pisania znalazłem taki program sortujacy przez scalanie, niby na wątkach. Jest to poprawnie napisane?
oryginalny kod.
package javaapplication3;
public class Main {
public static void main(String[] args) throws InterruptedException {
int i;
int tablica[];
int ile_liczb=10;
tablica = new int[ile_liczb];
tablica[0]=4;
tablica[1]=3;
tablica[2]=10;
tablica[3]=43;
tablica[4]=32;
tablica[5]=0;
tablica[6]=54;
tablica[7]=32;
tablica[8]=12;
tablica[9]=100;
System.out.println("Tablica przed posortowaniem:");
for(i=0; i<ile_liczb; i++)
System.out.print(tablica[i]+" ");
Watek w1 = new Watek(tablica, 0, ile_liczb-1);
w1.start();
w1.join();
System.out.println("Tablica po posortowaniu:");
for(i=0; i<ile_liczb; i++)
System.out.print(tablica[i]+" ");
}
}
class Watek extends Thread
{
int lewy, prawy, tablica[];
public Watek( int tab[], int _lewy, int _prawy) {
lewy=_lewy;
prawy=_prawy;
tablica=tab;
}
public void run(){
// System.out.println("Started: " + getName());
if (lewy<prawy) {
try {
int m = lewy;
for (int i = lewy + 1; i <= prawy; i++) {
if (tablica[i] < tablica[lewy]) {
zamiana(tablica, ++m, i);
}
}
zamiana(tablica, lewy, m);
Watek a = new Watek(tablica, lewy, m - 1);
Watek b = new Watek(tablica, m + 1, prawy);
a.start();
b.start();
a.join();
b.join();
} catch (InterruptedException ex) {
System.out.println("Pojawil sie problem z watkiem " + getName());
}
}
// System.out.println("Stopped: " + getName());
}
private static void zamiana(int tab[], int a, int b) {
int temp=tab[a];
tab[a]=tab[b];
tab[b]=temp;
}
}
sprawdzilem i sortuje. lecz ja potrzebuje przeprowdzić sorotwanie na dużej liczbie liczb ok. 1 mln. więc sprobowalem zrobić generator ktory wypelni randomem tablice a pozniej niech sobie ja sortuje. Lecz chyba coś poknociłem , bo po moim zmianach niechec to sortować. Jestem laikiem wiec na tą chwile nie widze gdzie mam błąd..
package javaapplication3;
import java.util.Random;
class WeziLosujLiczbe {
int tablica[];
public double getDouble(String s)
{
char c;
StringBuffer buf = new StringBuffer();
String sx;
double x;
System.out.print(s);
// pobierz x z konsoli jako ciąg znaków
try
{
while ((c = (char) System.in.read() ) != '\n')
buf.append(c);
// przekonwertuj x z typu String na typ double
sx = buf.toString();
x = Double.parseDouble( sx );
} catch (java.io.IOException e) { x = 0; };
buf.setLength(0); // oczyść bufor
return x;
}
public void losuje(int n)
{
this.tablica = new int[n];
for (int i = 0; i < n; i++)
{
Random random = new Random();
this.tablica[i] = random.nextInt();
}
}
public void wyswietl(int n)
{
for (int i = 0; i < n; i++)
{
System.out.println(+this.tablica[i]);
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
/* int i;
int tablica[];
int ile_liczb=10;
tablica = new int[ile_liczb];
tablica[0]=4;
tablica[1]=3;
tablica[2]=10;
tablica[3]=43;
tablica[4]=32;
tablica[5]=0;
tablica[6]=54;
tablica[7]=32;
tablica[8]=12;
tablica[9]=100;
System.out.println("Tablica przed posortowaniem:");
for(i=0; i<ile_liczb; i++)
System.out.print(tablica[i]+" ");
Watek w1 = new Watek(tablica, 0, ile_liczb-1);
w1.start();
w1.join();
System.out.println("Tablica po posortowaniu:");
for(i=0; i<ile_liczb; i++)
System.out.print(tablica[i]+" ");
*/
int i ;
int a;
int tablica[];
WeziLosujLiczbe losujizczytaj = new WeziLosujLiczbe();
System.out.println("Podaj liczbe elementow tablicy: ");
a = (int)losujizczytaj.getDouble("n = ");
losujizczytaj.losuje(a);
tablica = new int[a];
System.out.println("Elementy tablicy przed posortowaniem:");
losujizczytaj.wyswietl(a);
Watek w1 = new Watek(tablica, 0, a-1);
w1.start();
w1.join();
System.out.println("Elementy tablicy po sortowaniu:");
System.out.println("Tablica po posortowaniu:");
// losujizczytaj.sortuje(a);
losujizczytaj.wyswietl(a);
}
}
class Watek extends Thread
{
int lewy, prawy, tablica[];
public Watek( int tab[], int _lewy, int _prawy) {
lewy=_lewy;
prawy=_prawy;
tablica=tab;
}
public void run(){
// System.out.println("Started: " + getName());
if (lewy<prawy) {
try {
int m = lewy;
for (int i = lewy + 1; i <= prawy; i++) {
if (tablica[i] < tablica[lewy]) {
zamiana(tablica, ++m, i);
}
}
zamiana(tablica, lewy, m);
Watek a = new Watek(tablica, lewy, m - 1);
Watek b = new Watek(tablica, m + 1, prawy);
a.start();
b.start();
a.join();
b.join();
} catch (InterruptedException ex) {
System.out.println("Pojawil sie problem z watkiem " + getName());
}
}
// System.out.println("Stopped: " + getName());
}
private static void zamiana(int tab[], int a, int b) {
int temp=tab[a];
tab[a]=tab[b];
tab[b]=temp;
}
}