1.快速排序
1.1 思想:将原始数组划分成两个数组,第一个子数组中的元素小于或等于一个选定的关键字,这个关键字成为边界或者基准,同时,第二个子数组中的元素大于或等于边界。再继续对上述两个子数组进行排序,每个子数组选定一个新的边界。
1.2 伪代码(C++)
template<typename T>
void quicksort(T data[], int first, int last)
{
int lower = first + 1;
int upper = last;
swap(data[first],data[(last+first)/2]);
T bound = data[first];
while(lower <= upper)
{
while( data[lower] < bound ) lower++;
while(data[upper]>bound) upper--;
if(lower<upper) swap( data[lower++], data[upper--] );
else lower++;
}
swap(data[upper],data[first]);
if(first<upper) quicksort(data,first,upper-1);
if(upper+1 < last) quicksort(data,upper-1,last);
}
template<typename T>
void quicksort(T data[], int n)
{
int i;
int max;
if(n < 2) return;
for( i = 1,max = 0; i < n; ++i )
{
if(data[max] < data[i]) max = i;
swap(data[n-1], data[max]);
quicksort(data, 0, n-1);
}
}