快速排序
关于快速排序的开始顺序
右指针不断左移直到找到比基准元素小的元素位置,而左指针不断右移直至找到比基准元素大的元素位置。
对于一般的快速排序,通常将最左边的元素a[0]作为基准元素,所以要先从右边扫描。
先从右边扫描最后停留的位置肯定是小于基准数的。因为右指针是找比基准数小的数,先停在比基准数小的数,因此左指针和右指针相遇的情况只能是右指针先停止,然后左指针向右扫描直到和右指针相遇,所以相遇的位置肯定是比基准数小的,然后这个数和基准数交换,这个数在基准数左边并小于基准数,此时符合快排规则
先从左边扫描最后停留的位置肯定是大于基准数的,因为左指针是找比基准数大的数,先停在比基准数大的数,左指针和右指针相遇的情况只能是左指针先停止,然后右指针向左扫描直到和左指针相遇,所以相遇的位置肯定是比基准数大的,然后这个数和基准数交换,这个数在基准数左边但大于基准数,此时不符合快排规则
代码如下
1 | void quick_merge(int a[], int low, int high) |