终于知道啥是快排了!!!
- 确定一个基准元素,可以以左边得第一个元素为基准
- 从右侧开始找到一个比基准小的数,把此时左边得位置赋为该数,直至左右相遇
- 从左侧找到一个比基准大得数,把此时得右边得位置赋值为该数,直至相遇
- 相遇位置即是基准元素得位置
- 之后递归左半部分和右半部分
public class QuickSort {
static Integer index=0;
public static void main(String[] args) {
int[] array = { 49,38,65,97,76,13,27,49,10 };
sort(array, 0, array.length -1);
}
public static void sort(int[] nums, int left, int right){
index++;
System.out.print(index+"次: ");
for (int i : nums) {
System.out.print(i + " ");
}
System.out.println();
if(left < right){
int mid = partition(nums, left, right);
sort(nums, left, mid-1);
sort(nums, mid+1, right);
}
}
public static int partition(int[] nums, int left, int right){
int base = nums[left];
while(left < right){
while(left < right && nums[right] >= base){
right--;
}
nums[left] = nums[right];
while(left < right && nums[left] <= base){
left++;
}
nums[right] = nums[left];
}
nums[left] = base;
return left;
}
}