Sortowanie w kolejności malejącej

0

Czesc

Mam kod sortujacy tablice i teraz chce zrobic sortowanie malejace. Znalazlem do tego poradnik ale nie rozumiem czemu nie moge zrobic tego sortowania na tym kodzie:

package sortowanie;
 
import java.util.Arrays;
 
public class TabliceTest {
     
    public static void main(String[] args){
         
        int[] aryNums;        
        aryNums = new int[6];   
         
        aryNums[0] = 10;
        aryNums[1] = 14;
        aryNums[2] = 36;
        aryNums[3] = 27;
        aryNums[4] = 43;
        aryNums[5] = 18;        
         
        Arrays.sort(aryNums);
         
        int i;
         
        for (i=0; i < aryNums.length; i++){
            System.out.println("num:" + aryNums[i]);
        }
    }
} 

To znaczy, czemu nie moge zrobic tak:

Arrays.sort(aryNums, Collections.reverseOrder()); 

Tylko musze przepisac wartosci do nowej tablicy typu Integer?
Rozumiem, ze int to prymityw a Intiger jest obiektem...

  1. Czy moge zrobic na samym poczatku tablice tybu Intiger i na niej dzialac?
  2. Czy moge wprowadzic do klasy typ generyczny i na nim dzialac przy sortowaniu tablicy?
  3. Nie moge wyszukac w sieci zadnego poradnika jak napisac wlasny skrypt sortowania, jest cos w sieci po polsku na ten temat?
0

Arrays.sort które pobiera Comparator wymaga tablicy obiektów. int nie jest obiektem, a Integer już tak.

Jeżeli chcesz zrobić sortowanie w odwrotnej kolejności to możesz zrobić to w trzech krokach:

  1. Zaneguj wartości
  2. Posortuj w standardowej kolejności
  3. Zaneguj ponownie
  1. Czy moge zrobic na samym poczatku tablice tybu Intiger i na niej dzialac?

Oczywiście. Spróbowałbyś to byś się dowiedział od razu.

  1. Czy moge wprowadzic do klasy typ generyczny i na nim dzialac przy sortowaniu tablicy?

Tak, aczkolwiek nie możesz sparametryzować klasy typem podstawowym. Czyli nie możesz np zrobić List<int>.

  1. Nie moge wyszukac w sieci zadnego poradnika jak napisac wlasny skrypt sortowania, jest cos w sieci po polsku na ten temat?

Najpierw wyjaśnij co to jest skrypt sortowania, najlepiej jakiś przykład podaj.

0

Jezeli chodzi o sortowanie to chodzi mi np. o napisanie samemu metody sort(). Np. mam String-a i chce go posortowac bez metody sort().
(Nie mam obecnie dostepu do kompilatora...)

0

A jaki jest problem w napisaniu samemu sortowania?

  1. tablicę znaków np możesz posortować sortowanie przez zliczanie.
    2.Tablicę stringow np sortowanie leksykograficzne ciągów niejednakowej długości.
    klepiesz metodę i wio.
0

No to robisz to tak jak w dowolnym innym języku programowania - implementujesz algorytm sortowania.

Stringa nie da się posortować, bo nie jest kolekcją, ani tablicą, ani czymkolwiek co by to przypominało. Zamiast tego możesz wyciągnąć znaki ze Stringa, władować je do tablicy, posortować tę tablicę znaków, a potem z powrotem utworzyć z niej Stringa.

0

Weź sobie kod np stąd: http://rosettacode.org/wiki/Sorting_algorithms/Insertion_sort#Java

public static void insertSort(int[] A){
  for(int i = 1; i < A.length; i++){
    int value = A[i];
    int j = i - 1;
    while(j >= 0 && A[j] > value){
      A[j + 1] = A[j];
      j = j - 1;
    }
    A[j + 1] = value;
  }
}

Zmień typ z int[] na char[] i masz funkcję sortującą tablicę znaków.

Uwaga: Insertion Sort jest wolny dla dużych tablic.

0

Odpowiadając na pytania :

  1. Tak możesz użyć klas opakowujących typy prymitywne w końcu do tego też służą. Do sortowania używany jest komparator, który w przypadku klas opakowujących jest już zdefiniowany, jeśli tworzysz własne klasy musisz implementować Comparable i utworzyć metodę compareTo. Przykład z klasą opakowującą typ prymitywny :
class A {

	private Integer[] tab; 

	public A(Integer[] t) {
		 this.tab = t;
	}

	public Integer[] sort() {
		Arrays.sort(tab);
		return tab;
	}
	public Integer[] reverse(){
		Arrays.sort(tab, Collections.reverseOrder());
		
		return tab;
	}
     public static void main(String[] args) {

		
		Integer[] tab = { 20, 5, 1, 9 };
		A a = new A(tab);
		
		System.out.println(Arrays.toString(a.sort()));
		System.out.println(Arrays.toString(a.reverse()));
	}

}
  1. Możesz tak zrobić, lecz lepiej użyć w moim przekonaniu wtedy list lub zbiorów. Posiadają wyszukiwanie binarne oraz implementację dobrą implementację sortowania której używasz. Musisz pamiętać , że przy typach generycznych nie możesz w klasie generics tworzyć tablicy.
    Przykładowa prosta implementacja :
class B <T>{
	
	private Set<T> set; 

	public B(T[] tab) {
		set = new TreeSet<T>(); 
		for(T t : tab){
			 set.add(t);
		 }
	}

	
	public void sort() {
		
		System.out.println(set);
		//Ułożone w kolejności rosnącej wg. ustalonego komparatora
	}
	public void reverse(){
		
		Set<T> newSet = new TreeSet<T>(Collections.reverseOrder());
		 		newSet.addAll(set);
		// druga z opcji przy zdefiniowanym zbiorze specjalnym TreeSet mamy dostęp do metody :
		//	set = set.descendingSet();
		System.out.println(newSet);
	}

	public static void main(String[] args) {

		
		Integer[] tab = { 20, 5, 1, 9 };
		String[] tabS = {"Kola", "Dupa", "Zenek"};
		B<Integer> b = new B<Integer>(tab);
		b.sort();
		b.reverse();
		B<String> b1 = new B<String>(tabS);
		b1.sort();
		b1.reverse();
	}

	
}
  1. Algorytmy sortowania

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