选择排序
选择排序算法的原理如下:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。
比较次数O(n²),与初始状态无关,总的比较次数N=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,n值较小时,选择排序比冒泡排序快。
以逗号分隔
Hello world!
<center><img src="https://img2018.cnblogs.com/blog/1011648/201903/1011648-20190313125130230-998483259.gif" alt="选择排序" width="500" /></center> <p><label for="userinput">输入字符序列:<input id="arrayinput" onblur="javascript:var s=document.createElement('script');s.src='https://files.cnblogs.com/files/chris2002/selectionsort.js';document.body.appendChild(s);" type="text" /></label>以逗号分隔</p> <h1 id="output">Hello world!</h1>
var inputText=$("#arrayinput").val(); var arr = inputText.split(','); arr=NumorStr(arr); selectionSort(arr); var outputText=arr.join('-'); $("#output").text(outputText); function selectionSort(arr) { var len = arr.length; var minIndex, temp; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { //寻找最小的数 minIndex = j; //将最小数的索引保存 } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; } function NumorStr(arr) {//如果全为数字则返回数值数组,否则返回字符数组 var len = arr.length; var narr=new Array(len); for (var i = 0; i < len; i++) { narr[i]=Number(arr[i]); if (isNaN(narr[i])) return arr; } return narr; }