快排是排序中比较实用的一种算法;
快排的原理就是:(以从小到大排序数组arr[N]为例)
1、先找到数组中的一个元素作为锚定点(假设为数组中的第一个元素arr[0])
2、遍历数组将小于锚定点的数(假设k个点)放在数组的前面,将这些数交换至arr[1]~arr[k];
3、交换锚定点arr[0]和arr[k],此时arr[k]位置处的值就是最初设定的锚定点(arr[0]),arr[k]前面的数都比它小,后面的数都比它大;
4、然后对数组 [ arr[0],arr[k-1] ),( arr[k+1],arr[N] ] 这两个数组再进行上述的递归操作
5、一直递归到左元素下标大于等于右元素下标,排序停止
C语言实现如下;
//c语言核心代码如下;
void qsort(int v[],int left,int right)
{
int i,pos;
if (left >= right)
return;
//取第一个元素为锚定点
pos = left;
//遍历数组,将小于锚定点的数swap到数组前部
for (i=left+1;i<=right;++i) {
if (v[i]<v[left])
swap(v,i,++pos);
}
//将锚定点的数与swap至其正确位置pos;
swap(v,left,pos);
//递归该过程
qsort(v,left,pos-1);
qsort(v,pos+1,right);
}
//其中swap为交换一个数组中下标为i和j的函数;
void swap(int v[],int i,int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
//
int main()
{
int arr[10] = {7,1,3,9,2,6,1,7,3,5};
qsort(arr,0,9);
return 0;
}