快速排序

来源:互联网 发布:百利进销存软件网络版 编辑:程序博客网 时间:2024/06/16 22:41

简单说一下实现原理:

这里写图片描述

如图,从数组左边(index= 1)遍历到数组最右(index= array.length-1)。选第一位(index= 0)作为target将数组分为两半。f为分解点,f之前的(包含f)都比第一位小,之后的都比第一位大。当完成遍历后,数组将被分为两半,最后将index = f的元素与index= 0的元素交换位置,便完成了快速排序的第一步。之后只要对 f 的两边进行递归,当递归到底了,便完成了快速排序。
(有点含糊。。还是看代码吧 (~ ̄▽ ̄)~ )

/** * 快速排序实现 *  * @author 煎鱼 * */public class QuickSort {    public static void Sort(int[] arr) {        Sort(arr,0,arr.length-1);    }    public static void Sort(int[] arr , int left , int right) {        if(left>=right)return;//先判断是否递归到底!!!        //随机选一个数与第一个数交换,作为第一个作比较的数        //swap(0,(int) (Math.random()*arr.length),arr);        int num = arr[left];//记下要比较的值        int index = left;//index为上述的f,用于将数组分为两半        //关键代码: 遍历数组,如果比num大,则i++,如果比num小,则与index位置交换        //然后index++,即往前移一位        for(int i = left+1; i <= right; i++) {            if(arr[i]<num) {                swap(++index,i,arr);            }        }        swap(index,left,arr);//最后交换        //递归        Sort(arr,left,index-1);        Sort(arr,index+1,right);    }    //交换位置    public static void swap(int i, int j, int[] arr) {        int z = arr[j];        arr[j]=arr[i];         arr[i] = z;    }    //测试:    public static void main(String[] args) {        int[] arr = new int[10000000];        for(int i = 0 ; i<10000000 ; i++) {            arr[i]=(int) (Math.random()*arr.length);        }        Sort(arr);        System.out.println("finish");    }}
原创粉丝点击