• 快速排序


    快速排序是在实践中最快的已知排序算法,它的平均运行时间是O(NlogN)。该算法之所以特别快,主要是由于非常精炼和高度优化的内部循环。

    编码实现如下:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    template <typename Comparable>
    void insertionSort( vector<Comparable> &a,int left,int right )
    {
        int j;
    
        for ( int p = left + 1 ; p < right + 1 ; p++ ){
            Comparable tmp = a[p];                          //保存当前元素值
            for ( j = p ; j > left && tmp < a[j - 1] ; j-- )   //通过循环将位置p之前比p大的元素都向右移一格
                a[j] = a[j - 1];
            a[j] = tmp;                                     //最后在适当的位置插入元素值.
        }
    }
    
    
    template <typename Comparable>
    const Comparable &median3( vector<Comparable> &a,int left,int right )
    {
        int center = ( left + right ) / 2;
        if ( a[center] < a[left] )
            swap( a[left],a[center] );
        if ( a[right] < a[left] )
            swap( a[left],a[right] );
        if ( a[right] < a[center] )
            swap( a[center],a[right] );
    
        swap( a[center],a[right - 1] );
        return a[right - 1];
    }
    
    template <typename Comparable>
    void quicksort( vector<Comparable> &a,int left,int right )
    {
        if ( left + 10 <= right ){
            Comparable pivot = median3( a,left,right );
    
            int i = left,j = right - 1;
            for ( ; ; ){
                while( a[++i] < pivot ) {}
                while ( pivot < a[--j] ) {}
                if ( i < j )
                    swap( a[i],a[j] );
                else
                    break;
            }
    
            swap( a[i],a[right - 1] );
    
            quicksort( a,left,i - 1 );
            quicksort( a,i + i,right );
        }
        else
            insertionSort( a,left,right );
    }
    
    template <typename Comparable>
    void quicksort( vector<Comparable> &a )
    {
        quicksort( a,0,a.size() - 1 );
    }
    
    int main()
    {
        cout << "请输入一些数据:" << endl;
    
        vector<int> vec;
        int temp;
    
        while ( cin >> temp )
            vec.push_back( temp );
    
        quicksort( vec );
    
        cout << "按升序排列过的数据如下:" << endl;
    
        vector<int>::iterator iter = vec.begin();
        while( iter != vec.end() )
            cout << *iter++ << endl;
    
        return 0;
    }
    我们一路奋战,不是为了改变世界,而是不让世界改变我们 ——《熔炉》
  • 相关阅读:
    我读过的书 编程爱好者
    HarmonyOS ListContainer基础用法
    HarmonyOS ListContainer 读取网络json数组
    HarmonyOS Activity页面跳转
    HarmonyOS ListContainer 图文并排
    HarmonyOS 线性布局练习一 登录页面
    jsonserver 环境搭建及使用方法
    HarmonyOS 真机调试
    在win下设置C语言环境变量
    使用 Eclipse 调试 Java 程序的 10 个技巧
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5193786.html
Copyright © 2020-2023  润新知