田有朋 2020-04-19
以6、1、7、9、3、8、2、10、3、7
这10个数为例,首先要在这个序列中随便找一个基准数(为了方便,一般都选第一个元素作为基准数),我们现以6为基准数。
接下来操作的目的就是为了让比基准数6大的数放在6的左边,比基准数6小的数放在6的右边。
具体的操作方法是:先从右往左找到第一个小于6的数,在从左往右找到第一个大于6的数,然后交换他们!
java代码实现:
package com.guohao.arithmetics; import java.util.Arrays; import java.util.Scanner; /** * 快速排序 */ public class QuickSort { public static void main(String[] args){ Scanner reader = new Scanner(System.in); int n = reader.nextInt(); //待排序的元素个数 int[] arr = new int[n]; //用于储存待排序元素的数组 //用户从键盘输入待排序元素 for (int i=0; i<n; i++){ arr[i] = reader.nextInt(); } reader.close(); sort(arr, 0, arr.length-1); //调用sort方法对数组arr进行排序 System.out.println("排序后的数组:"+ Arrays.toString(arr)); } /** * 将整型数组arr中的元素从小到大排序 * @param arr * @param left * @param right */ public static void sort(int[] arr, int left, int right){ if(left > right){ return ; } int temp = arr[left]; //基准数temp int i=left, j=right; while(i != j){ while(arr[j]>=temp && i<j){ //从右向左找到一个比temp小的数,记录其下标 j--; } while(arr[i]<=temp && i<j){ //从左向右找到一个比temp大的数,记录其下标 i++; } if(i < j){ //交换两个数的位置 int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } //使基准数归位 arr[left] = arr[i]; arr[i] = temp; sort(arr, left, i-1); //递归处理基准数左边的元素 sort(arr, i+1, right); //递归处理基准数右边的元素 } }