快速排序
是一种不稳定的排序算法,时间复杂度 O(nlog2 N)。
基本思想:
首先选一个轴值(pivot,即比较的基准),将待排序记录划分为独立的两部分,左侧记录的关键码均小于或等于轴值。右侧记录的关键码均大于或等于轴值,然后分别对这两部分重复上述过程,直到整个序列有序。
代码:
int Partition(int r[],int first,int end)//一次划分算法
{
int i = first;
int j = end;
while (i<j)
{
while (i < j && r[i] <= r[j])//右侧扫描
{
j--;
}
if(i<j)
{
int nTemp = r[i];
r[i] = r[j];
r[j] = nTemp;
i++;
}
while (i<j && r[i] <= r[j])//左侧扫描
{
i++;
}
if (i<j)
{
int nTemp = r[i];
r[i] = r[j];
r[j] = nTemp;
j--;
}
}
return i;
}
void QuickSort(int r[],int first,int end)
{
int pivot;
if (first<end)
{
pivot = Partition(r, first, end);
QuickSort(r, first, pivot - 1);
QuickSort(r, pivot + 1, end);
}
}