Quick Sort-快速排序
快速排序(Quick Sort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
Ex:
以第一个元素5为key,第一轮循环,要把小于5的元素放左边,大于等于5的放右边
接着递归,5左边的2,1,4,3重复,5右边的7,8,6,9重复。
void Quick_Sort(vector<int> &v, int first, int end) { if (first < end) { int key = v[first]; int i = first; int j = end; while (i < j) { while (i < j&&v[j]>=key) j--; if (i < j) v[i] = v[j]; while (i < j&&v[i] < key) i++; if (i < j) v[j] = v[i]; } v[i] = key; //此时i=j Quick_Sort(v, first, i-1); Quick_Sort(v, i+1, end); } }
int Partition(int data[], int length, int start, int end) //分割 { int pivot = data[end]; int curpos = start; for (int index = start; index < end; index++) { if (data[index] < pivot) { swap(data[index], data[curpos]); curpos++; } } swap(data[curpos], data[end]); return curpos; } void Quick_Sort(int data[],int length, int start, int end) { if (start >= end) return; int index = Partition(data, length, start, end); if (start < index) Quick_Sort(data, length, start, index - 1); if (index < end) Quick_Sort(data, length, index + 1,end); }