实现递归快排的结果有问题
其他问答
1
package com.itheima.myBinarySearch;
public class Demo2 {
public static void main(String[] args) {
// 先定义一个int类型的数组
int[] arr = {3, 4, 1, 7, 14, 8, 9, 10};
// 定义一个快排的方法
quitSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void quitSort(int[] arr, int left, int right) {
// 定义一个最左边的值、最右边的值、基本数
int left0 = left;
int right0 = right;
int basenumber = arr[left0];
while(left != right){
while(arr[left] <= basenumber && left < right){
left++;
}
while(arr[right] >= basenumber && right > left){
right--;
}
// 交换两个值
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
// 当左右两边指向同一个数的时候,基准数归位
int same = arr[left];
arr[left] = arr[left0];
arr[left0] = same;
}
}
打印结果:
4 1 3 7 14 8 9 10
作为基本数的3左边并不是都小于3的
-
给你参考一下正确的,望采纳
public static void quickSort(float[] array,int low,int high) { if(low < high) { //获取基准点 int middle = getMiddle(array,low,high); quickSort(array,low,middle-1); quickSort(array,middle+1,high); } } //对每个分部数组进行排序,并给出下一轮的数组切分点 public static int getMiddle(float[] arr,int low,int high) { //数组的第一个数为基准元素 float temp = arr[low]; while(low < high) { while(low < high && arr[high] >= temp) { high--; //从后向前找比基准小的数 } //把比基准小的数移到低端 arr[low] = arr[high]; while(low < high && arr[low] <= temp) { low++; //从前向后找比基准大的数 } //把比基准大的数移到高端 arr[high] = arr[low]; } arr[low] = temp; return low; }
发表回复