在什么情况下Quicksort比Bubblesort更快?为什么呢?

时间:2016-09-21 17:24:08

标签: c++ performance optimization quicksort bubble-sort

快速排序:

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

最坏情况:

Quicksort:n²

Bubblesort:n²

平均情况:

Quicksort:nlog(n)

Bubblesort:n²

通常情况下,这意味着Quicksort比Bubblesort更快。

但在哪种情况下Quicksort比Bubblesort更快?

记住,当列表已经按照几乎排序的顺序时,Quicksort将继续递归,对于非常小的集合,bubblesort可以更快。

1 个答案:

答案 0 :(得分:3)

  

通常情况下,这意味着Quicksort比Bubblesort更快?

是的。更快,更快。

  

记住,当列表已经按照几乎排序的顺序时,Quicksort将继续递归。

正确。 Quicksort最糟糕的情况是一个大问题,所以如果不进行修改,它通常不是现实世界使用的首选算法。