一、荷兰国旗问题
给你一个数组arr[ ]以及一个数x,将这个数组的结构调整为arr[i]<=x的放左边,arr[i]>x的放右边。
1.1、将这个数组的结构调整为arr[i]<=x的放左边,arr[i]>x的放右边。
思路:在数组的-1位置设置一个<=x的区域
①当前数<=目标数,当前数和(<=x区域)下一个数交换,<=x区域向右扩,当前数跳下一个
②当前数>目标数,当前数数跳下一个
1.2、将这个数组的结构调整为arr[i]<x的放左边,arr[i]=x的放中间,arr[i]>x的放右边。
①当前数<目标数当,当前数和(<x区域)下一个数交换,<x区域向右扩,当前数跳下一个
②当前数=目标数,当前数直接跳下一个
③当前数>目标数,当前数和(>x区域)前一个数交换,>x区域向左扩,当前数停在原地
1.3、如果目标数是这个数组中的最后一个数
二、快速排序
2.1、快排1.0
使用荷兰国旗问题1.3递归,每次将=目标数的放中间,1.0版本放一个
2.2、快排2.0
使用荷兰国旗问题1.3递归,每次将等于最后一个目标数的放中间(批量),凤城左边右边继续
2.3、快排3.0
随机选了一个数,与最右侧的数交换,在用这个随机数做划分值。