public class QuickSort { //基本思想为分治法,实现时采用挖坑填数+分治法,先从数列中取出一个数作为基准数,分区,将比这个数大的数放到它的右边, //小于或等于它的数放到它的左边,对左右区间重复第二步,直到各区间只有一个数。在O(N*logN)的几种排序方法中效率较高 public static void quickSort(int[] arr,int low,int high){ int i,j,temp,t; if(low>high)//错误参数 return; i=low; j=high; temp = arr[low];//temp是基准数,默认数组第一个元素,也有其他选择,比如中间数,随机选择等 while (i<j) { while (temp<=arr[j]&&i<j)//从右向左找小于基准数的数来填坑 j--; while (temp>=arr[i]&&i<j)//从左向右找大于或等于基准数的数来填坑 i++; if (i<j) {//满足条件则交换 t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } arr[low] = arr[i];//交换,填坑 arr[i] = temp; quickSort(arr, low, j-1);//递归调用左半数组 quickSort(arr, j+1, high);//递归调用右半数组 } public static void main(String[] args){ int[] arr = new int[]{10, 0, 5, 8, -1,-8, 10, 0}; System.out.print("排序前数组:") for (int n :arr) System.out.print(n + ","); quickSort(arr, 0, arr.length-1); System.out.print("排序后数组:") for (int n :arr) System.out.print(n + ","); } }
原文:https://www.cnblogs.com/pycdu/p/14595900.html