什么是快速排序
快速排序其实是对冒泡排序的一种优化。
它的基本思想是将一个数组分为两部分,一边比较大一边比较小。然后在两边分别递归在进行一次。
为了 比较方便,我们引入了一个叫做基准数的东东。在实现快排时,我们要先确定一个基准数,为了方便,我们通常选数组的第一个(亦可选数组的中间)。然后我们从数组的两边分别开始历遍,这里我们假设是从小到大排。我们先定义两个变量i,j,充当是指针的作用。
首先i要指向最左边的数,j要指向最右边的数。i递增,j递减。当i遇到比基准数要大的数时,停下来。j遇到比基准数要小的数时停下来。此时再交换i,j所指的数。当i=j时,一轮排序接近完成。此时再将i所指的数与数组的第一个数相交换,此时基准数的左边都是小于基准数的数,右边都是大于基准数的数。第一轮排序正式完成。
然后我们再分别向基准数的左边,右边递归,排序就完成了。
C++代码
void quicksort(int a[],int left,int right)
{
int i,j,temp,t;
if(left>right) return;
temp=a[left];
i=left;
j=right;
while(j!=i)
{
while(a[j]<=temp&&i<j) j--;
while(a[i]>=temp&&i<j) i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
return;
}
事实上,在OI中,我们可以调运排序函数:sort;跟多信息请点击:
http://www.cnblogs.com/A-Song/archive/2012/02/02/2336337.html
我的《快速排序简析》到此结束。如果想要了解更多关于快排的信息,请访问以下网址:
推荐:
http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html
写的很简洁,易懂;
http://blog.csdn.net/morewindows/article/details/6684558
还有这个,写的也好。
http://blog.csdn.net/xuxiaotuzi33/article/details/5790696
总结了各种排序的思想,值得一看。
http://baike.baidu.com/link?url=l_sJaZHtIkG5mUqW8izexyjhbbG4q5sZ1zm-mn66Y4ycxaJ8lWzuKnQqSqTyNIz5V4SMjWzELZ4H3sW6vEWcYz0G6YavKvy2pWK4w2hmXpqwDfrCvCGPl0edE0rvysxOOZ3WqtFtvHYx5ZbFb7iLFh94b375oYpmO6Jxrt6T2fUpWVA95HZucfYGwtqfG5RL0mMjuZK_5OrRNvW40e5nVaGGZIoX4NzZgXExjO9t-bK
百度百科的,有关于快搜的优化。但写的比较乱。