快速排序是一种效率比较高的排序方法,时间复杂度为O(nlogn),这个时间基本上能够过绝大部分OJ,下面是它的主要排序方法:
快速排序主要采取从数组尾和数组首两端同时比较排序的方法,选取数组尾即数组的最后一个元素为待比较的元素,然后从数组尾依次向前直到找到第一个比原来的待比较元素大的元素(此处实现数组的升序排列,若实现数组的降序排列则找到第一个比待比较元素小的元素),然后交换,再使数组首为待比较元素,从前向后找,直到找到第一个比它小的元素(与上面的注释一样,降序反之),然后交换。至此完成一个循环。再依次重复上述步骤,(运用递归的方法),直至数组首尾相遇。就排好了。
下面是代码:
void quicksort(int a[],int low,int high) //待排序数组a,low为排序起点,high为排序终点。
{
int i,j,temp;
i=low;
j=high;
temp=a[i];
if(low<high) //当排序起点小于终点时进行
{
while(i<j)
{
while(i<j && a[j]>=temp) //从后向前查找直到找到第一个比temp小的元素
{
j--;
}
a[i]=a[j];
while(i<j && a[i]<=temp) //从前向后查找直到找到第一个比temp大的元素
{
i++;
}
a[j]=a[i];
}
a[i]=temp; //更新
quicksort(a,low,i-1); //递归进行查找
quicksort(a,j+1,high);
}
else //当排序起点大于终点时,返回
{
return;
}
}