zoukankan      html  css  js  c++  java
  • 快速排序(java实现)

    快速排序

    算法思想:基于分治的思想,是冒泡排序的改进型。首先在数组中选择一个基准点(该基准点的选取可能影响快速排序的效率,后面讲解选取的方法),然后分别从数组的两端扫描数组,设两个指示标志(lo指向起始位置,hi指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换lo和hi位置的值,然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换lo和hi位置的值,如此往复循环,直到lo>=hi,然后把基准点的值放到hi这个位置。一次排序就完成了。以后采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。

    排序过程:

              

    算法实现:

     

    public class partition {

    public int getStoreIndex(int[] a,int left,int right){
    int temp=a[left];
    while(left<right){
    while(left<right&&a[right]>=temp){
    right--;
    }
    a[left] = a[right];
    while(left<right&&a[left]<=temp){
    left++;
    }
    a[right] = a[left];
    }
    a[left]=temp;
    return left;
    }

    public void quickSort(int[]a,int left ,int right){
    if (left<right) {
    int index = this.getStoreIndex(a, left, right);
    this.quickSort(a, left, index-1);
    this.quickSort(a, index+1,right);
    }
    }

    public void sort(int[] a){
    if (a!=null&&a.length>0) {
    this.quickSort(a, 0, a.length-1);
    }
    }

    public static void main(String[] args) {
    int[] a={5,4,8,3,7,2,1,9,0,6};
    partition t = new partition();
    t.sort0(a);
    for(int i:a){
    System.out.print(" "+i);
    }
    }

    }

    快速排序的时间复杂度为O(NlogN).

    快速排序在序列中元素很少时,效率将比较低,不然插入排序,因此一般在序列中元素很少时使用插入排序,这样可以提高整体效率。

     
    public static void quick(int []a ,int left,int right){
            if(right-left+1<10){
                insertSort(array);
            }else{
                quickSort(array,lo,hi);
            }
        }
     
  • 相关阅读:
    火狐浏览器清理缓存快捷键
    SVN使用教程总结
    如何登陆服务器
    get、put、post、delete含义与区别
    zookeeper 半数可用/选举机制
    zookeeper 分布式安装/配置/启动
    lucene 统计单词次数(词频tf)并进行排序
    selenium 爬取空间说说
    MapReduce自定义InputFormat,RecordReader
    reduce 阶段遍历对象添加到ArrayList中的问题
  • 原文地址:https://www.cnblogs.com/meimei00/p/7488329.html
Copyright © 2011-2022 走看看