【发布时间】:2017-01-30 01:53:28
【问题描述】:
快速排序:
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²
通常,这意味着快速排序往往比冒泡排序更快。
但在哪些情况下快速排序比冒泡排序更快?
请记住,当列表已经几乎排序时,快速排序将继续递归,对于非常小的集合,冒泡排序可以更快。
【问题讨论】:
-
视情况而定。对于非常小的集合,冒泡排序可以更快,但大多数时候快速排序会更快。
-
跨站欺骗/相关:cs.stackexchange.com/questions/3/…。另外你真的应该先使用谷歌。已经有很多这方面的信息了。
-
是的,是的,不能总是依赖快速排序,尤其是因为选择了枢轴。
-
"快速排序比冒泡排序快吗?" - 对于要排序的非平凡大小的集合:Yes 在大多数 情况下。但是,在大多数情况下,如果排序不是您的应用程序最性能关键的部分,您可能不必太担心,只需使用
std::sort:) -
那些 big-O 参数仅在 n 很大时才适用,因此任何常数因素或开销都会被淹没。当 n 很小时,常数因子和开销会占主导地位。即使在具有相同大 O 的算法中,常数因子和开销也占主导地位。他们不会费心在课堂上提到这一点。此外,快速排序的最坏情况下的性能很容易通过微不足道的更改来弥补。
标签: c++ performance optimization quicksort bubble-sort