美文网首页
48_冒泡排序和希尔排序

48_冒泡排序和希尔排序

作者: 编程半岛 | 来源:发表于2018-07-17 20:43 被阅读14次

    关键词:冒泡排序、希尔排序

    0. 冒泡排序

    思想:每次从后向前进行(假设为第i次),j=n-1, n-2, ..., i,两两比较v[j-1]和v[j]的关键字;如果发生逆序,则交换v[j-1]和v[j]。




    template < typename T >
        static void Bubble(T array[], int len, bool min2max = true) // O(n^2)
        {
            bool exchange = true;
    
            for(int i=0; (i<len) && exchange; ++i)
            {
                exchange = false;
    
                for(int j=len-1; j>i; --j)
                {
                    if(min2max ? (array[j] < array[j-1]) : (array[j] > array[j-1]))
                    {
                        Swap(array[j], array[j-1]);
                        exchange = true;
                    }
                }
            }
        }
    

    1. 希尔排序

    思想:将待排序列划分为若干组,在每一组内进行插入排序,以使整个序列基本有序,然后再对整个序列进行插入排序

    希尔排序示例


    template < typename T >
        static void Shell(T array[], int len, bool min2max = true)
        {
            int d = len;    // 增量
    
            do
            {
                d = d / 3 + 1;  // 改变增量
    
                for(int i=d; i<len; i+=d)
                {
                    int pos = i;
                    T value = array[i];
    
                    for(int j=i-d;
                        (j>=0) && (min2max ? (array[j] > value) : (array[j] < value)) ;
                        j-=d)
                    {
                        array[j+d] = array[j];
                        pos = j;
                    }
    
                    if( pos != i )
                    {
                        array[pos] = value;
                    }
                }
    
            }while(d > 1);
        }len;
    

    2. 小结

    • 冒泡排序每次从后向前将较小的元素交换位置
    • 冒泡排序是一种稳定的排序法,时间复杂度为O(n^2)
    • 希尔排序通过分组的方式进行多次插入排序
    • 希尔排序是一种不稳定的排序法,时间复杂度为O(n^3/2)

    声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
    实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

    相关文章

      网友评论

          本文标题:48_冒泡排序和希尔排序

          本文链接:https://www.haomeiwen.com/subject/ygjgpftx.html