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);
    }
}

 

posted @ 2016-07-03 15:36  桃源仙居  阅读(136)  评论(0)    收藏  举报