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的
你这好像是冒泡排序啊! arr[left] <= basenumbe 在这个条件是恒等于啊
给你参考一下正确的,望采纳
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;
}