排序 假设一个数组q从left到right,使用排序算法将数组中的元素有序排列: 快速排序 主要思想:分治 步骤 1. 确定分界点x 直接取左/右边界,或者中间,又或者随机,都可以 q[left],q[right],q[(left+right)/2] 2. 根据分界点x调整 调整x的左侧的值,只保留小于等于x的; 调整x的右侧的值,只保留大于等于x的。 3. 递归处理 让左侧部分递归快排,再让右侧递归快排 代码设计 1. 定义数组a,b。分别用于存储小于等于x的数,大于等于x的数。 2. 遍历整个区间q[left]到q[right],比较与x的大小,存入a或b。 3. 数组q清空,先push数组a,再push数组b。 代码设计(高效版) (无需开辟额外空间) 1. 一个指针i指向最左侧q[left],一个指针j指向最右侧q[right]。 2. 两个指针分别向中间走。i先走,如果i指向的数小于x,i+1;直到指向的数大于等于x停下。j再走,如果j指向的数大于x,j-1;直到指向的数小于等于x停下。此时,将i,j指向的两数交换。 3. i,j继续往中间走,直到i,j相遇过为止。即i大于等于j。此时以指针为界,分成了左右两块区域。

视频信息