选择排序
(一)什么是选择排序
它的工作原理是每一次从待排序的数据中选出最大(小)的一个元素,存放在序列的起始位置,然后再从剩余未排序中继续寻找最大(小)小)元素,然后再从剩余从排序元素中继续寻找最大(小)元素,放到的已排序序列的末尾。以此类推,直到全部待排序元素派完。
如果已经了解了选择排序,那么可以直接进入到总结篇:https://www.cnblogs.com/gdouzz/p/10759399.html
(二)代码实现
static int[] SelectionSort(int [] arr) { for(var i = 0; i < arr.Length; i++) { var tempValue = arr[i]; for(var k = i; k < arr.Length; k++) { if (tempValue < arr[k]) { var temp = arr[k]; arr[k] = tempValue; tempValue = temp; } } arr[i] = tempValue; } return arr; }
(三)时间复杂度分析
//选择排序 //选择排序的主要优点与数据移动有关,如果某个元素在正确的位置,则它不会被移动。 //选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 {\displaystyle n} n个元素的表进行排序总共进行至多 //displaystyle n-1} {\displaystyle n-1}次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。 //最坏情况下 //逆序,5,4,3,2,1 //第一趟,先找到最小的,比较4次,交换一次。 //第二趟,1,4,3,2,5 比较3次,交换一次。 //第三躺,1,2,3,4,5 比较2次, 交换一次。 //第四趟,1,2,3,4,5 比较1次,交换一次。 //最坏情况下,比较次数o(n²),交换次数n-1次 //最好情况 //本身是有序的:1,2,3,4,5,交换零次,比较次数还是o(n2)的平方。 //这个特性导致了选择排序,几乎不会有人用了。
看完这个时间复杂分析了,终于明白为啥工作那么久了,从来没有想着去用选择排序了。
选择排序,这个算法不常用,基本不用,主要是用来扩展我们的思维的。
终极目标:世界大同