现有 arr= {4,8,9,2,7}数组,请用快速排序的方式实现从小到大排序:
方法:
1.定义待排序数组中的第一个值为基准数;
2.定义j游标,从后向前移动找到第一个比基准数小的值停下;
3.定义i游标,从后向前移动找到第一个比基准数大的值停下;
4.i和j数值交换;
5.重复2-4步骤直到i和j相遇;
6.基准数和相遇位置的数据进行交换,交换完后的基准数到达正确位置;
7.以基准数为起始点,分为左右两部分,重复上述1-6步骤,直至数据都被拆分开结束
完整代码:
java
package Java.start;
import java.util.Arrays;
public class quickSort {
//快速排序
public static void main(String[] args) {
int[] arr= {4,8,9,2,7};
Sort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void Sort(int[] arr,int left,int right) {
if(left>=right) {//为了防止过界(!注意)
return;//递归出口
}
int base=arr[left];
//System.out.println(base+"base");
int i=left;
int j=right;
while(i!=j) {
// j游标从后向前移动,找比基准数更小的
while(arr[j]>=base&&i<j) {
j--;
}
//i游标从前向后移动,找比基准数更大的
while(arr[i]<=base&&i<j) {
i++;
}
//i和j交换
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//i和j相遇,基准数和相遇位置进行交换
arr[left]=arr[i];
arr[i]=base;
//排序左边
Sort(arr,left,i-1);
//排序右边
Sort(arr,i+1,right);
}
}
结果: