再看一遍排序算法

  排序算法千千万万, 根据不同语言平台都能找到最适合的排序算法, 重新复习一下.

  排序算法使用的情况非常多, 而且大部分情况不只是对数字(int, float, double等)进行排序, 而是通过断言(Predicate)进行元素排序, 比如字符数组按照头文字的英文顺序排序之类的, 就需要使用比较排序才能进行, 所以我们看到的常用算法都是比较排序的. 

  比较排序就是根据两个元素的对比, 获得返回来决定重排的顺序, 大部分语言提供的排序都有断言, 比如C#的:

    var list = new System.Collections.Generic.List<int>();
    list.Sort((_l, _r) =>
    {
        if(_l > _r)
        { return 1; }
        if(_l < _r)
        { return -1; }
        return 0;
    });

  或者Lua的: 

    local compare_func = function(v1, v2) return v1 < v2 end
    local t = {}
    table.sort(t, compare_func);

  下面看看几种常用排序算法, 这大致有七个, 已经被用烂了的:

一. 选择排序. 原理就像体育课排队一样, 小朋友乱站成一排, 从中找到最矮的叫他站到排头, 再从排头之外找出最矮的站到第二位置, 以此类推. 代码如下:

    /// <summary>
    /// 选择排序
    /// </summary>
    /// <param name="array"></param>
    public static void SelectSort_BigEnd(int[] array)
    {
        for(int i = 0; i < array.Length; i++)
        {
            int minVal = array[i];
            int minIndex = i;
            for(int j = i + 1; j < array.Length; j++)
            {
                int compareValue = array[j];
                if(minVal > compareValue)
                {
                    minIndex = j;
                    minVal = compareValue;
                }
            }
            if(minIndex != i)
            {
                array[minIndex] = array[i];
                array[i] = minVal;
            }
        }
    }

  复杂度啊什么的, 一般算法都没有突破O(n2), 都差不多, 之所以它们是常用算法, 是因为它不使用额外内存, 也不进行大量内存移动操作, 很简单就能实现排序, 多快好省.

  像这样的算法, 就可以扩展成为通用算法了, 试试把它扩展成泛型的:

猜你喜欢

转载自www.cnblogs.com/tiancaiwrk/p/12651681.html