终于轮到我们的终极算法了,快速排序顾名思义,速度肯定是很快的。它的基本思想是:把一个待排序列分隔成两个独立的序列,其中一个序列中的数比关键字小,另一个序列中的数比关键字大,然后对这两个序列再进行排序,最后使整个序列有序。
这个算法里面有两个关键点,一是怎样选择这个关键字?二是怎样把一个序列分成两个子序列,使一个子序列比关键字小,另一个子序列比关键字大?
我们首先来看第二个问题,怎样用程序实现,在这里面我们假设关键字就是待排序列的第一个数。代码如下:
int high)
这个算法比较经典,要仔细的理解一下,里面用到的swap方法就是交换两个数,这里就不详细叙述。我个人开始做的时候,没想到这个算法,自己实现了一个比较笨的,但理解起来相对比较容易,代码如下:
{
int pivotkey = sortList[low];
while (low < high)
{
//1.1从高位向低位循环,找出一个数,比pivotkey小的,把它与pivotkey交换,此时pivotkey的值是sortList[low]
while (low < high && sortList[high] >= pivotkey)
{
high--;
}
Swap(sortList,low,high);
//1.2从低位向高位循环,找出一个数,比pivotkey大的,把它与pivotkey交换,如果上面的while循环有交换,那么此时pivotkey的值是sortList[high]
while (low < high && sortList[low] <= pivotkey)
{
low++;
}
Swap(sortList, low, high);
}
return low;//把pivotkey数的下标返回
}