从上一则博客讲起,目前我们已经知晓了插入排序这种算法,接下来就来看看第三种排序算法——选择排序
正式开始
同样的,这还是从小到大排序。我懒惰,不想写从大到小的,聪明的读者朋友应该会写。
与前两种排序方式不同,选择排序是依靠交换去移动元素的排序方法中最有效一种。它的核心思路是找到一个数组的最大元素,把它放在数组的最末位。然后在进行递归,继续去选择前面的无序数组的最大值,并又把它放在无序数组最末位。如此,在进行 n-1 次递归后数组被整理完毕。
这里有个生动形象的GIF,网上都有哒
这个动图其实跟现在文章中讲的不太一样,它把数组分为了一些区间再来选择。怎么说,其实这种会更好些,但代码会更加复杂,这文章是给初学者看的,就不提那种写法了(主要是懒)。
具体思路
开始
M[1,2,3,......,n]无序
第一次
M[1,......,n]选择最大值M[k],并与M[n]交换位置
第 i 次
M[1,......, i-1 ]是有序的
M[i,......, n ]是无序的
在无序区间内选择M[k]最大,并且与M[1,......, i-1 ]交换位置
最终,Selection sort完毕
代码实例
这里放出代码的方法块,建议新手手打哦。
private static void SelectionSort(int[] List)
{
for (int i = 0; i < List.Length - 1; i++)
{
int Index = i; //List中最小值的下标
for (int j = i + 1; j < List.Length; j++)
{
if (List[j] < List[Index])
{
Index = j;
}
}//获取目前的末下标
int temp = List[i];
List[i] = List[Index];
List[Index] = temp;//交换数据
}
}
收工
至此,三种常见的排序算法已经给大家全部普及完了。
希望大家有所收获,我们一起进步。
之后我会多发一些Unity3d的内容,毕竟我还是比较擅长U3D的。
感谢大家!!!(转载给我说声哦)