Qk
1,多次二分排序
2,定义一个目标位置 index
3,进行一次right操作找到右边小于index的值 ,记录指针位置right
4,替换掉 index所在指针位置 (后自减进行指针迁移)
5,进行一次left操作找到左边大于index的值,记录指针位置left
6,替换掉上一次right指针所在的值 (后自增进行指针迁移)
。。。
7,left和right相遇,一次排序结束,将index的值替换掉left所在的位置
8,进行left指针两次进行递归操作
public class QKSORT {
public static void qkSort(int[] arrs){
quicksort(arrs,0,arrs.length-1);
}
static int tage = 0;
private static void quicksort(int[] v, int oleft, int oright){
if (oleft>oright) return;
int index, left, right;
left = oleft;
right = oright;
index = v[oleft];
while (left<right){ tage++;
//右找到小的指针
while (left < right && index <= v[right]) {
right--;
}
//进行一次right操作
if (left<right) v[left++] =v[right];
//左找到大的
while (left < right && index >= v[left]) {
left++;
}
//进行一次left操作
if (left<right) v[right--] = v[left];
}
v[left] = index;
quicksort(v,oleft,left-1);
quicksort(v,left+1,oright);
}
@Test
public void test1(){
int[] arrs = new int[]{12, 52, 23, 24, 95, 56, 117, 8, 659, 411, 22};
qkSort(arrs);
System.out.println("最后结果 " +tage);
System.out.println(Arrays.toString(arrs));
}