快速排序:
基本思想:在数列进行快速排序时,选择第一个数为基准值(begin),判断if(left>begin)就swap(left,right),然后right–(向前移一位),if(left<begin)就left++(left向前移一位),当left和right移到一起
就把基准值插入到数列中,循环结束后,left=right,原本数列a[begin+1]~a[end],左边比基准值小,右边比基准值大,然后把基准值插入到合适序列中,判断基准值比最后left和right共同指的那个数哪个大
如果基准值比它大就放在它后边(交换就行)如果基准值比它小就放在它前边(基准值直接和left-1交换)
代码:
//快速排序
void QuickSort(int data[], int begin, int end)
{
int temp;
int left = begin + 1;
int right = end;
if (begin < end) //数列中存在数据进入排序
{
while (left < right)
{
//判断基准值与left的大小
if (data[begin] < data[left])
{
//交换a[left]和a[right]的值,right--
swap(&data[left], &data[right]);
right--;
}
else
left++;
}
//循环结束后,left=right,原本数列a[begin+1]~a[end],左边比基准值小,右边比基准值打,然后把基准值插入到合适序列中
//判断基准值比最后left和right共同指的那个数哪个大
//如果基准值比它大就放在它后边(交换就行)
//如果基准值比它小就放在它前边(基准值直接和left-1交换)
if (data[begin] > data[left])
{
swap(&data[begin], &data[left]);
}
else
{
left--;
swap(&data[begin], &data[left]);
}
//此时原本数列a[begin]~a[end]就被分成了两个数列 a[begin]~a[left-1]和a[left+1]~a[end]
QuickSort(data, begin, left);
QuickSort(data, left + 1, end);
}
}