Глупи сорт

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу
Глупи сорт
Намена неефикасно сортирање
Временска компл. неограничена[1]
Средња ВК [1]
Меморијска компл.
Стабилан не

Глупи сорт (енгл. bogosort, bogo-sort, stupid sort)[1] је непрактичан алгоритам сортирања, који се углавном користи у едукативне сврхе, као контраст бржим алгоритмима. Овај алгоритам сортира низ елемената тако што случајно бира њихове размештаје док се не деси да низ буде сортиран. Ово чини да његова временска сложеност у најгорем случају буде бесконачна то јест да се овим случајним размештањем низ никада не сортира. Његова средња временска сложеност се процењује на O(n · n!) јер свака комбинација n елемената без понављања има шансу 1/n! да погоди сортирано стање (па отуда O(n!)), а између провера се врши комплетно мешање низа, што је у домену O(n).[2]

Као илустрација може да послужи шпил карата. Уколико овај шпил мешамо, а између мешања проверавамо да ли је сортиран, онда поступамо по алгоритму глупог сорта.

Опис алгоритма[уреди]

У псеудокоду, алгоритам глупог сортирања би се могао изразити на следећи начин:

   док није сортиран(шпил):
       промешај(шпил)

Исти овај алгоритам се у Јави може написати овако:

public void glupiSort(int[] n) {
  Random random = new Random();
 
  // Провера сортираности низа
  glavnaPetlja: do {
    for(int i = 0; i < n.length; i++) {
      // Уколико се дошло до краја низа, а није се наишло на
      // несортираност, главна петља се прекида. Низ је сортиран.
      if(i == n.length-1) {
        break glavnaPetlja;
      }

      // Уколико се наишло на два суседна а несортирана елемента,
      // прекинути проверу, и наставити са случајним распоређивањем.
      if(n[i] > n[i+1]) {
        break;
      }
    }
 
    // Прераспоређивање елемената низа. Сваки елемент низа замењује
    // место са случајно изабраним унутар интервала који још није
    // био измешан у овом пролазу.
    for(int i = n.length - 1; i > 0; i--) {
      int mestoSlucajnoIzabranog = random.nextInt(i + 1);
      int bafer = n[i];
      n[i] = n[mestoSlucajnoIzabranog];
      n[mestoSlucajnoIzabranog] = bafer;
    }
  } while(true);
}

Референце[уреди]

  1. 1,0 1,1 1,2 Gruber, H.; Holzer, M.; Ruepp, O., „Sorting the slow way: an analysis of perversely awful randomized sorting algorithms”, 4th International Conference on Fun with Algorithms, Castiglioncello, Italy, 2007 (PDF), Lecture Notes in Computer Science, 4475, Springer-Verlag, стр. 183—197, doi:10.1007/978-3-540-72914-3_17 .
  2. ^ Fun with Algorithms; Crescenzi, Prencipe, Pucci. ISBN 978-3-540-72913-6., pp. 191