迭代形式 每一级方法的执行都能将一个取定的基准值放到中间
6 3 2 8 1 5 4 7 9
取6作为基准值 第一级方法partition执行完能将数据按照6位基准左右分割成两部分
public static void sort(int[] L, int left, int right)
{
int pivot;
if(left < right)
{
pivot = partition(L, left, right);
sort(L, left, pivot - 1);
sort(L, pivot + 1, right);
}
}
将基准值不停的与比他它大 和比他小的位置交换 最终换到分割点
public static int partition(int[] L, int left, int right)
{
int pivotkey;
pivotkey = L[left];
while(left < right)
{
while(left < right && L[right] >= pivotkey)
{
right--;
}
//与右边比基准值小的数交换位置
swap(L, left, right);
while(left < right && L[left] <= pivotkey)
{
left++;
}
//与左边比基准值小的数交换位置
swap(L, left, right);
}
//分割点 即基准值得坐标
return left;
}
public static void swap(int[] L, int i, int j)
{
int temp = L[i];
L[i] = L[j];
L[j] = temp;
}