• 排序算法详解 一


    1.插入排序

    //Description  :最差情况下,直接插入排序的最大时间代价为θ(n²),最小时间代价为θ(n),平均时间代价为θ(n²)。

    void InserSort(int array[],int n)
    {
        for (int i=1;i<n;++i)
        {
            for (int j=i;j>0;--j)//以0到i为遍历区间
            {
                if (array[j]<array[j-1])
                    swap(array,j,j-1);
                else
                    break;//为>时即可知是有序数组即break
            }
        }
    }

    2.冒泡排序

     

    图示是依次从大到小找到各个元素,下面代码依次从小到大找到各个元素

    //Description  :冒泡排序的最大时间代价,最小时间代价和平均时间代价均为θ(n²)(稳定)。

    void BubbleSort(int array[],int n)
    {
        for (int i=0;i<n-1;i++)//通过n-1次循环一次将最小值排到最左边
        {
            for (int j=n-1;j>i;--j)//从右边开始遍历
            {
                if(array[j]<array[j-1])
                    swap(array,j,j-1);
            }
        }
    }

    3.选择排序

    //Description  :选择排序的最大时间代价,最小时间代价和平均时间代价均为θ(n²)。选择排序不依赖于原始数组的输入顺序。(稳定)

    void SelectionSort(int array[],int n)
    {
        for (int i=0;i<n-1;++i)//外循环,用smallest不断抽取最小值
        {
            int smallest=i;
            for(int j=i+1;j<n;++j)//内循环找到smallest
            {
                if(array[smallest]>array[j])
                    smallest=j;
            }
            swap(array,i,smallest);
        }
    }

    4.希尔排序(特殊的插入排序)

    //Description  :增量为2的shell排序的时间代价可以达到θ(n的3/2次方),有的增量可以达到θ(n的7/6次方),很接近θ(n)。

    void ShellSort(int array[],int n)
    {
        for(int delta=n/2;delta>0;delta/=2)
            for(int i=0;i<delta;++i)
                for(int j=i+delta;j<n;j+=delta)
                    for(int k=j;k>0;k-=delta)
                        {
                            if(array[k]<array[k-1])
                              swap(array,k,k-1);
                            else
                                break;
                        }
    
    }
  • 相关阅读:
    c++作业2 9.22
    c++作业1 9.22
    c++练习题2
    c++练习题1
    10.10作业3
    10.10作业2
    10.10作业 1
    9.22作业5
    9.22作业4
    9.22zuo
  • 原文地址:https://www.cnblogs.com/zhaodun/p/7470733.html
Copyright © 2020-2023  润新知