Java实现快速排序算法

来源:互联网 发布:如何制作淘宝图片 编辑:程序博客网 时间:2024/06/11 11:42

排序算法采用的是分而治之的方法,刚开始需要选择一个基准值,以这个基准值,把数组分成两部分,左边小于基准值的数组,右边大于基准值的数组(假设我们要实现从小到大的排列),然后在对左边序列选取基准值再把该序列一分为二,右边序列也一样,直到分到不能分为止,一直递归下去,就自然成为有序序列,快速排序的平均时间复杂度为nlog(n),但是也有缺点就是快速排序算法的稳定性不足,对于相同大小的值,因为两个值的位置不同而最后排序出来的序列不同,(可能先出现的排在前面,也可能排在后面),下面是Java实现的代码

public class sort_quick {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        int[] data={6,3,7,4,1};        new sort_quick().sort(data,0,4);        for(int i=0;i<5;i++)            System.out.println(data[i]);    }    public void sort(int[] data,int low,int hight){    //运用三个中找一个合适的作为基准!    //找基准的方法有三种,第一:就以第一个为基准    //第二:随机    //第三:找第一和中间和最后三个数之间的中间值        if(low>hight)            return;        int mid = (low+hight)/2;        if(data[hight]<data[mid]){            int temp =data[hight];            data[hight]=data[mid];            data[mid]=temp;        }        if(data[hight]<data[low]){            int temp =data[hight];            data[hight]=data[low];            data[low]=temp;        }        if(data[mid]>data[low]){            int temp =data[mid];            data[mid]=data[low];            data[low]=temp;         }        int key=data[low];       while(low<hight){           while(low<hight&&data[hight]>key){               hight--;           }           if(low<hight)data[low++]=data[hight];           while(low<hight&&data[low]<key){               low++;           }           if(low<hight)data[hight--]=data[low];       }       data[low]=key;       sort(data,0, low-1);       sort(data,low+1,hight);    }}
原创粉丝点击