zoukankan      html  css  js  c++  java
  • 排序算法-快速排序

    快速排序算法思想:

    快速排序是冒泡排序的改进算法。它也是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的元素从前面直接放到后面,关键字较小的元素直接从后面放到前面,从而减小了比较次数和交换次数。
     
    对于近乎有序的数组,可采用起始值为数组中随机数字,否则会退化成O^2级别
    对于含有大量重复的数组,可用左右两端双索引的方式去向中间靠拢排序,否则会退化成O^2级别(双路快速排序)
    对于上面两个问题,最终优化使用三路快速排序,大于基准元素部分,小于基准元素部分和等于基准元素部分,之后对于小于,大于进行递归

    v1版实现

    template<typename T>
    int __partition(T arr[],int l,int r){
        T v = arr[l];
        int j = l;
        for(int i = l+1;i<=r;i++)
            if (arr[i] < v){
                swap(arr[j+1],arr[i]);
                j++;
            }
        swap(arr[l],arr[j]);
    }
    
    
    template<typename T>
    void __quickSort(T arr[],int l,int r){
        if(l >= r)
            return;
        int p = __partition(arr,l,r);
        __quickSort(arr,l,p-1);
        __quickSort(arr,p+1,r);
    }
    
    //快速排序
    template<typename T>
    void quickSort(T arr[],int n){
        __quickSort(arr,0,n-1)
    }
  • 相关阅读:
    java中创建线程的方式
    idea查看一个接口的子接口或实现类的快捷键
    idea查看源码没有注释的问题
    spring中的Aop
    spring中的ApplicationListener监听器
    spring中的事务管理
    IDEA创建springboot 项目
    xiaopiu产品设计
    java 6大设计原则 一:观察者模式
    java面向对象
  • 原文地址:https://www.cnblogs.com/Erick-L/p/12593575.html
Copyright © 2011-2022 走看看