2016-09-21 8 views
-1

Quicksort:В каких ситуациях Quicksort быстрее, чем Bubblesort? Зачем?

void Quicksort(int array[], int left, int right){ 
    int pivot = left, i,ch,j; 
    for(i=left+1;i<=right;i++){ 
     j = i; 
     if(array[j] < array[pivot]){ 
      ch = array[j]; 
      while(j > pivot){ 
      array[j] = array[j-1]; 
      j--; 
      } 
      array[j] = ch; 
      pivot++; 
     } 
    } 
    if(pivot-1 >= left){ 
     quick(array,left,pivot-1); 
    } 
    if(pivot+1 <= right){ 
     quick(array,pivot+1,right); 
    } 
    } 

BubbleSort:

void Bubblesort(int array[]) 
{ 
    int length = array.length; 
    int i,j,r,aux; 
    for(i=length-1; i >= 1; i--) 
    { 
     for(j=0; j < i ; j++) 
     { 
      if(array[j]>array[j+1]) 
      { 
       aux = array[j]; 
       array[j] = array[j+1]; 
       array[j+1] = aux; 
      } 
     } 
    } 

    for(k = 0; k < length; ++k) 
    { 
     printf("%d\n",array[k]); 
    } 
} 

Наихудший:

Quicksort: n²

BubbleSort: n²

Средний случай:

Quicksort: Nlog (п)

BubbleSort: n²

Так обычно это означает, что Quicksort будет, как правило, быстрее, чем BubbleSort.

Но в каких ситуациях Quicksort быстрее, чем Bubblesort?

Помнят, что, когда список уже находится в почти упорядоченном порядке, Quicksort будет продолжать рекурсию, а для очень маленьких коллекций bubblesort может быть быстрее.

+3

От этого зависит. Для очень маленьких коллекций bubblesort может быть быстрее, но большая часть времени quicksort будет быстрее. – Thomas

+2

перекрестный сайт dupe/related: http://cs.stackexchange.com/questions/3/why-is-quicksort-better-than-other-sorting-algorithms-in-practice. Также вы должны сначала использовать Google. Об этом уже много информации. – NathanOliver

+0

Да, и да, на быструю сортировку не всегда можно положиться, особенно из-за выбора шарнира. – ABcDexter

ответ

3

Как правило, это означает, что Quicksort будет быстрее, чем Bubblesort?

Да. Много, намного быстрее.

Помнят, что, когда список уже находится в почти упорядоченном порядке, Quicksort будет продолжать рекурсию.

Право. Худший случай Quicksort - большая проблема, поэтому без модификации обычно это не алгоритм выбора для использования в реальном мире.

+0

Re: point 2 --- Но многие из этих «краевых» неэффективности можно легко поймать с помощью нескольких простых изменений в чистую quicksort –

+0

@AlexW: [Introsort] (http://stackoverflow.com/q/11175478/ 315052). – jxh

+0

@AlexW Отредактировано для уточнения. Но обычно бывает просто выбрать другой тип, который позволяет избежать проблемы, например, сортировать кучу. – Caleb