快速排序
算法流程:
- 选定轴值
privot
(当前选择左边第一个元素) - 右指针放在最后一个元素,左指针放在第一个元素。右指针左移找到小于轴值元素,之后左轴值右移指导找到第一个大于轴值的元素,然后交换两个元素的值。继续移动右,左指针直到指向同一个值,将轴值所在位置的元素和相同节点的数值交换。
- 递归排序左边到轴值左边和轴值右边到数组右边
C++版本
void fastsort(std::vector<int>& nums,int left,int right){
if(left>right)
return;
int l=left,r=right;
int privot = nums[l];
while (l!=r){
while (nums[r]>=privot&&l<r)
r--;
while (nums[l]<=privot&&l<r)
l++;
if(l<r)
std::swap(nums[l],nums[r]);
}
nums[left]=nums[l];
nums[l]=privot;
fastsort(nums,left,l-1);
fastsort(nums,l+1,right);
}
Python版本
def fastsort(lists,left,right):
if left>right:
return
l = left
r = right
privoit = lists[l]
while l!=r:
while lists[r]>=privoit and l<r:
r-=1
while lists[l]<=privoit and l<r:
l+=1
if l<r:
temp = lists[r]
lists[r]=lists[l]
lists[l] = temp
lists[left] = lists[l]
lists[l] = privoit
fastsort(lists,left,l-1)
fastsort(lists,l+1,right)