• 快速排序(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);
            }
        }
     
  • 相关阅读:
    系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式(分享二十二)
    某云数据中心网络解决方案(分享二十一)
    oracle 12c 管理(分享二十)
    Codeforces 356D 倍增优化背包
    Codeforces 360D Levko and Sets (数论好题)
    gym/102253C Colorful Tree 树上计数
    Codeforces 360E 贪心 最短路
    Codeforces 360C DP 计算贡献
    Codeforces 354B 博弈, DP,记忆化搜索
    Codeforces 354C 暴力 数论
  • 原文地址:https://www.cnblogs.com/meimei00/p/7488329.html
Copyright © 2020-2023  润新知