美文网首页C++算法题及解答
排序算法之快速排序

排序算法之快速排序

作者: BEYOND黄 | 来源:发表于2017-06-01 00:43 被阅读5次

在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。

步骤:

1.从数列中挑出一个元素,称为 “基准”(pivot),

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。对每个分区递归地进行步骤1~3,递归的结束条件是序列的大小是0或1,这时整体已经被排好序了。

#include

usingnamespacestd;

voidQsort(inta[],intlow,inthigh)

{

if(low>high) {

return;

}

intfirst = low;

intlast = high;

intkey = a[first];//基准

while(first<last)

while(first=key) {//从最后一个元素开始向前便利,获得第一个小于基准的元素。

last--;

}

a[first]=a[last];//将比第一个小的放到数组低下标处

while(first

first++;

}

a[last]=a[first];//将比第一个大的放在数组高处

}

a[first] = key;

Qsort(a, low, first-1);//递归

Qsort(a, first+1, high);

}

intmain(){

inta[]={23,45,72,54,34,23,13,12,56,89,12};

Qsort(a,0,sizeof(a)/sizeof(a[0])-1);

for(inti =0; i<sizeof(a)/sizeof(a[0]);i++)

cout<<a[i]<<" ";

}

return0;

}

相关文章

网友评论

    本文标题:排序算法之快速排序

    本文链接:https://www.haomeiwen.com/subject/dkxsfxtx.html