paź 28

Sortowanie jest jednym z poważnych problemów programowania w każdym języku. Obecnie średnio najwydajniejszym algorytmem sortującym jest Quicksort.
Na początek zajmiemy się jednak stworzeniem własnego algorytmu. Zasada jego działania jest prosta. Program bierze każdy element tabeli po kolei i porównuje go z każdym innym elementem w tabeli. Jeśli napotka jakikolwiek większy element niż znajdujący się na końcu tablicy, zamienia go z tym ostatnim.

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  int main() {
  6. // deklaracja i wypełnienie tablicy
  7. int a[] = {9, 412, 22, 623, 666, 425, 248589789, 124, 4572, 148589789}; // 10 elementów
  8.  
  9. //sortowanie
  10. //zaczynamy poszukiwanie największej liczby od końca tablicy, dla każdego elementu wykonujemy czynność napisaną dalej
  11. //q reprezentuje indeks elementu tablicy
  12. for (int q=9; q>0; q–) {
  13. // q jest zmniejszane, ponieważ pomijamy w sprawdzaniu liczby które zostały określone jako największe wcześniej, q reprezentuje miejsce gdzie umieścimy największą wartość tego przebiegu
  14. // zmienna "najwieksza" przechowuje indeks elementu w tablicy z największą dotychczas znalezioną wartością
  15. // zakładamy od początku że jest to 0, by zacząć porównywanie od początku, to właśnie wartość znajdująca się w tym elemencie jest porównywana z każdym następnym
  16. int najwieksza=0;
  17.  
  18. for(int d=0; d<=q; d++) {
  19. // metoda "każda z każdą", dla danego elementu bierzemy każdy inny element tablicy, aż do q, bo w miejsce q ustawimy największą znalezioną wartość
  20. if (a[d]>a[najwieksza]) najwieksza=d;
  21. // jeśli dany element jest większą od obecnego zapisanego jako największy, poprawiamy indeks największej wartości
  22. }
  23. // bo wewnętrznym forze, podmieniamy największą znalezioną wartość z ostatnim elementem danego przebiegu (q)
  24. int s = a[q];
  25. a[q]=a[najwieksza];
  26. a[najwieksza] = s;
  27. }
  28.  
  29. //sprawdzenie
  30. // wyrzucamy na wyjście uporządkowane już elementy tablicy
  31. for(int n=0; i<10; i++) cout<<a[n]<<endl;
  32.  
  33. }

A teraz najszybszy algorytm Quicksort:
Jako argumenty przyjmuje on tablicę, indeks pierwszego elementu oraz  indeks ostatniego elementu:

  1. void quickSort(int arr[], int left, int right) {
  2. int i = left, j = right;
  3. int tmp;
  4. int pivot = arr[(left + right) / 2];
  5.  
  6. /* partition */
  7. while (i <= j) {
  8.   while (arr[i] < pivot) i++;
  9.   while (arr[j] > pivot) j–;
  10.   if (i <= j) {
  11.     tmp = arr[i];
  12.     arr[i] = arr[j];
  13.     arr[j] = tmp;
  14.     i++;
  15.     j–;
  16.   }
  17. };
  18.  
  19. /* recursion */
  20. if (left < j) quickSort(arr, left, j);
  21. if (i < right) quickSort(arr, i, right);
  22. }

Szczegółowy opis algorytmu Quicksort można znaleźć tutaj.

VN:F [1.9.3_1094]
Rating: 7.5/10 (2 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)

written by Don Daniello \\ tags: , , ,