06_快速排序

import java.util.*; public class Quick{ public static void main(String[] args){ int[] array = {4, 5, 0, 3, 1, 2, 6, 7, 8, 9 }; sort(array, 0, array.length-1); System.out.println("快速排序结果:"+Arrays.toString(array)); } public static void sort(int[] array,int start,int end){ System.out.println(Arrays.toString(array)); if(start<end) { int key=array[start];//初始化保存基元 int i=start;//初始化i,j for(int j=i+1;j<=end;j++){ if(array[j]<key){//如果此处元素小于基元,则把此元素和i+1处元素交换,并将i加1,如果大于等于基元继续循环 System.out.println(array[j]+"<"+key); int temp=array[j]; array[j]=array[i+1]; array[i+1]=temp; i++; //i用来标识比基元小的数值放在什么位置,每次交换的时候就+1 System.out.println(Arrays.toString(array)); System.out.println("继续移动元素"); } } System.out.println(""); System.out.println("将本次比较的基元"+key+"放在i处,与i处的元素进行交换,i处的元素一定是比基元小的,i作为分界线,继续往左往右递归,i处的元素不再变动"); // System.out.println(Arrays.toString(array)); array[start]=array[i];//交换i处元素和基元 ,i处的元素一定是比基元小的 array[i]=key;//将本次比较的基元放在i处,i作为分界线,继续往左往右递归,i处的元素不再变动 System.out.println(Arrays.toString(array)); sort(array, start, i-1);//递归调用 sort(array, i+1, end); } } }
package algorithm; import java.util.Arrays; /** * 快速排序:时间复杂度为 * 最好:O(nlogn) * 最坏:(1+2+3+4+...+n-1)~O(n2) * 思想:选取基元,每次将基元放在正确位置后,以基元为分界点,两边分别进行递归 * @author cloud * @data 2016年7月18日 * @version 1.0 * @description */ public class QuickSort { public static void quickSort(int[] array,int start,int end){ //{4, 5, 0, 3, 1, 2, 6, 7, 8, 9 }; if(start < end){ int i = start;//保存基元的位置 int key = array[start];//保存基元 for(int j = i + 1;j <= end; j++){ if(array[j] < key){//逐个和基元比较,如果比基元小,那么就把这个数值,往前边插 int temp = array[j]; array[j] = array[i+1]; array[i+1] = temp; i ++;//此时这个i值就是放置的比基元小的元素位置 } } //放置好基元,基于变为分界点 array[start] = array[i]; array[i] = key; System.out.println(Arrays.toString(array)); //以基元为分界点递归调用 quickSort(array,start,i-1); quickSort(array,i+1,end); } } public static void main(String[] args) { int[] array = {4, 5, 0, 3, 1, 2, 6, 7, 8, 9 }; quickSort(array,0,array.length-1); } }
    http://www.cnblogs.com/makexu/

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号