题目
快速排序
1,递归实现快速排序,先定义方法体和start,end
private void quickSort(int[] arr) {
quickCore(arr, 0, arr.length - 1);
}
private void quickCore(int[] arr, int start, int end) {
}
2,定义左右指针和一个活动指针,并设置临界条件start<end,否则退出
private void quickSort(int[] arr) {
quickCore(arr, 0, arr.length - 1);
}
private void quickCore(int[] arr, int start, int end) {
int left = start;
int right = end;
int index = arr[left];
while (start < end) {
}
}
3,
private void quickSort(int[] arr) {
quickCore(arr, 0, arr.length - 1);
}
private void quickCore(int[] arr, int start, int end) {
int left = start;
int right = end;
int index = arr[left];
while (start < end) {
// 从后往前遍历,找到比index小的数
if (start < end && arr[right] >= index) {
right--;
}
arr[left] = arr[right]; // 把找到的小的数值替换给左边
}
}
4,
private void quickSort(int[] arr) {
quickCore(arr, 0, arr.length - 1);
}
private void quickCore(int[] arr, int start, int end) {
int left = start;
int right = end;
int index = arr[left];
while (start < end) {
// 从后往前遍历,找到比index小的数
if (start < end && arr[right] >= index) {
right--;
}
arr[left] = arr[right]; // 把找到的小的数值替换给左边
//从前向后遍历,直到找到比index大的数
if (start < end && arr[left] <= index) {
left++;
}
arr[right] = arr[left]; // 把较大的数放在右边
}
// 把left填充
arr[left] = index;
}
5,递归index的左侧和右侧
private void quickSort(int[] arr) {
quickCore(arr, 0, arr.length - 1);
}
private void quickCore(int[] arr, int start, int end) {
int left = start;
int right = end;
int index = arr[left];
while (start < end) {
// 从后往前遍历,找到比index小的数
if (start < end && arr[right] >= index) {
right--;
}
arr[left] = arr[right]; // 把找到的小的数值替换给左边
//从前向后遍历,直到找到比index大的数
if (start < end && arr[left] <= index) {
left++;
}
arr[right] = arr[left]; // 把较大的数放在右边
}
// 把left填充
arr[left] = index;
quickCore(arr, start, index - 1);
quickCore(arr, index + 1, end);
}