一 、基本思想为:
快速排序 -拆分排序,取一个标准值,比这个值小的放到这个数据的左边,大的放到值得右边,然后递归这个标准值左边和右边的数组再次进行排序
二、时间复杂度:
三、排序过程如图:
四、代码实现:
public class Test3 { public static void main(String[] args) { int[] arrs = { 4,6,7,3,2,1 ,5,8 }; paixu(arrs,0,arrs.length-1); System.out.println( arrs ); } /** * 说明:快速排序 -拆分排序,取一个标准值,比这个值小的放到这个数据的左边,大的放到值得右边,然后递归这个标准值左边和右边的数组进行排序 * 如: 4,6,7,3,2,1 ,5,8 排序, * 1 取集合最后个值8作为基准值 * 2 定义数组中放比基准值小的数组的位置i=0(遍历除了基准值以外的数据,每次与基准值对比,小的数据则放到i这个位置,i随后加一) * 3 遍历剩下的所有数据 4,6,7,3,2,1 ,5, * 每个数据值与基准值8进行对比,如果比基准值8小则放到位置 i 上,然后i加上1 * 4 遍历结束以后,将基准值放到位置 i 上,此时i 左边都比基准值小,i右边都比基准值大 * 5 递归 遍历 i 左边 和右边的数组 * @param arr * @param left * @param right */ private static void paixu(int[] arr ,int left ,int right ){ if(left < right ){ int i=left; //保存比标准值小的数据下标 int j=left ;//遍历 int ph = arr[right]; for( ;j<right;j++ ){ if( arr[j]<ph ){ swap(arr,i,j ); i++ ; } } swap(arr , right ,i ); paixu(arr,left ,i-1 ); paixu(arr, i+1 ,right); } } private static void swap(int[] arr , int i ,int j ){ int tmp = arr[i]; arr[i]=arr[j]; arr[j]= tmp ; } }