2016-09-21 16 views
-1

クイックソート: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); 
    } 
    } 

バブルソート:

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]); 
    } 
} 

最悪の場合:

クイックソート:n²

バブルソート:n²

平均ケース:

クイックソート:nlog(n)は

バブルソート:n²

だから通常、これはクイックソートがバブルソートよりも速くなる傾向があることを意味します。

しかし、Quicksortの方がBubblesortよりも速いのはどちらですか?

リストがほぼ並べ替え順になっている場合、Quicksortは再帰を続けることになり、非常に小さなコレクションではより早くなります。

+3

です。非常に小さなコレクションの場合、バソルトは高速にすることができますが、時間のほとんどはクイックソートが速くなります。 – Thomas

+2

クロスサイトdupe/related:http://cs.stackexchange.com/questions/3/why-is-quicksort-better-than-other-sorting-algorithms-in-practiceまた、あなたは本当にGoogleを最初に使用する必要があります。これに関する情報はすでにたくさんあります。 – NathanOliver

+0

はい、はい、quicksortは、特にピボットの選択のために頼ることはできません。 – ABcDexter

答えて

3

通常、QuicksortはBubblesortよりも高速になる傾向がありますか?

はい。はるかに高速です。

すでにリストがほぼソートされている場合、Quicksortは再帰を続けます。

右。クイックソートの最悪の場合は大きな問題です。変更することなく、通常は実世界で使用するアルゴリズムではありません。

+0

Re:point 2 ---しかし、これらの「エッジケース」の非効率性の多くは、単純なクイックソートの簡単な変更によって簡単に捕捉できます。 –

+0

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

+0

@AlexW明確にするために編集されました。しかし、ヒープソートのような問題を回避する別のソートを選択するのは一般的です。 – Caleb

関連する問題