JavaScript 实现 -- 选择排序

363 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

本文主要记录了JavaScript 实现 -- 选择排序,及其原理、空间复杂度、时间复杂度和算法稳定性。

选择排序

选择排序(Selection sort)是一种简单直观的排序算法。

原理

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。依次类推完成整个数组的排序。

数组 arr = [4,1,6,3,5,2] 进行选择排序。首先遍历一次数组找出最小值 1 ,放在首位。然后遍历第二次找出次小值 2 放在第二位,接着遍历排序,直到排完这个数组。

在这里插入图片描述

示例代码

 		Array.prototype.selectionSort = function(){   
            for(var i = 0; i < this.length-1; i++){
                var minIndex = i
                for( var j = i ; j < this.length; j++){
                    if( this[j] < this[minIndex] ){ 
                        minIndex = j;			
                    } 
                }
                if(minIndex !== i){
                	[ arr[i], arr[minIndex] ] = [ arr[minIndex], arr[i] ]; //交换位置
                }
            }
        }
        var arr = [4,1,6,3,5,2];
        arr.selectionSort();
        console.log(arr);	// [1, 2, 3, 4, 5, 6]

空间复杂度

因为只有交换的时候,需要空间存放临时变量,所以空间复杂度为O(1)

时间复杂度

  • 选择排序,无论是哪种情况,哪怕原数组已排序完成,它也将花费将近n²/2次遍历来确认一遍,时间复杂度为O(n²)

算法稳定性

  • 选择排序是不稳定的排序算法,因为它相等的两个元素的位置,在排序前的相对前后位置和排序完成后的,相对前后位置不一致。

例如:数组 6、7、6、2、8,在对其进行第一遍循环的时候,会将第一个位置的6与后面的2进行交换。此时,就已经将两个6的相对前后位置改变了,所以选择排序不是稳定性排序算法。

本文到此结束

如果大家还有什么其他想法,欢迎在评论区交流!