快速排序函数声明:
void quick(T* a , int n);
快速排序算法简介
假设数组长度为n
数组定义方式: T a[10];
T是模板类型,相当于JAVA 1.5后出现的范型
先交换下标为 0 和 下标为 n>>1 的元素
swap(*a , a[n>>1]) ;
然后取得指向第二个元素的指针(也就是数组中第二个元素的地址)
T * L = a+1; 左指针
再取得指向最后一个元素的指针(也就是数组中最后一个元素的地址)
T* R = a + n - 1;
取中间值(交换后下标为0的数组元素)
T* mid = *a;
while(L < R)
{
while(L<R && *L <= mid) L++;
while(R>a && *R > mid) R--;
// *L mid *R 这种顺序下 L++,R--;
/*
从左边开始搜索,只要出现一个比中间值大的数组元素
(自定义类型请重载 > 符号,友元,成员都可以),终止搜索
从右边开始搜索,只要出现一个比中间值小的数组元素
(自定义类型请重载 < 符号,友元,成员都可以),终止搜索
*/
if(L < R) swap(*L , *R);
/*
如果L ,R指针没有相遇 , 则交换
swap(const T& a ,const T& b)是using namespace std(相当于C中的#include<stdlib.h>)
定义好的,直接用
*/
}
if(*a > *R) swap(*a,*R);
/ /如果位于0位置的中间值 > R指针指向的值 , 交换
这样一次排序完成
保证中间值左边都是比它小的值,右边都是比它大的值
然后递归
对中间值左边的数组元素排序
quick(a,R-a);
中间值地址是指针R的值
对中间值右边的数组元素排序
quick(R+1,n-(R-a)-1);
n<=1 if(n<=1) return;