选排序的思路是首先从要排序的数组中选择最小的和目前的第一位交换位置,然后从剩下的数中选择最小的和第二个位置的数交换位置,再从剩下的数中选择最小的和第三个位置的数交换位置,以此类推,实现代码如下:
function selectSort(arr){ if(!Array.isArray(arr)){ return false; //类型判断 } else{ var flag; for(var i=0;i<arr.length;i++){ var minIndex = i; //假设最小数的索引 for (var j = i; j < arr.length; j++) { if(arr[j]<arr[minIndex]){ minIndex = j; //找到更小的数,更新索引 } } if(arr[minIndex]<arr[i]){ flag = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = flag; } } return arr; } }
算法分析:无论最好或最坏情况,该算法的时间复杂度总是O(n2),因为每次要走第二个for循环找最小的数,感觉有点坑啊。