再看一遍排序算法
作者:互联网
排序算法千千万万, 根据不同语言平台都能找到最适合的排序算法, 重新复习一下.
排序算法使用的情况非常多, 而且大部分情况不只是对数字(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), 都差不多, 之所以它们是常用算法, 是因为它不使用额外内存, 也不进行大量内存移动操作, 很简单就能实现排序, 多快好省.
像这样的算法, 就可以扩展成为通用算法了, 试试把它扩展成泛型的:
标签:minIndex,return,int,看一遍,算法,array,排序 来源: https://www.cnblogs.com/tiancaiwrk/p/12651681.html