快速排序:
基本思想:在数列进行快速排序时,选择第一个数为基准值(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); } }