选择排序原理:
第一轮中,先假设最小数字的索引是0,依次向后寻找判断,找到更小的数时改变真实最小数字的索引,最终确定真实最小数字的索引,最后交换假设最小数字索引位置和真实最小数字索引位置。
第n轮中,先假设最小数字的索引是n,依次向后寻找判断,找到更小的数时改变真实最小数字的索引,最终确定真实最小数字的索引,最后交换假设最小数字索引位置和真实最小数字索引位置。
代码:
<script><br /> //准备一个乱序的数组<br /> var arr = [9,3,6,2,4,1,8,5,7];<br /> //输出一下<br /> console.log(arr);<br /> //进行长度少1轮的比较 因为最后一个索引为最后一个-1,所以最后1轮不需要,用arr.length - 1<br /> for(var j = 0; j < arr.length - 1; j++){<br /> //假设最小的数字索引为j<br /> var minIndex = j;<br /> //循环遍历数组,从索引j+1位置开始<br /> for(var i = j+1; i < arr.length; i++){<br /> //判断是不是比我假设索引位置的数字小<br /> if(arr[i] < arr[minIndex]){<br /> //条件为true的时候替换minIndex <br /> minIndex = i; <br /> } <br />![1.5-04选择排序代码规律.png](https://cdn.nlark.com/yuque/0/2022/png/27834772/1650132898926-f2623493-95b9-4903-9259-2eecdff9dc0d.png#clientId=ucb23a45f-490a-4&crop=0&crop=0&crop=1&crop=1&from=ui&height=119&id=u360dd3f2&margin=%5Bobject%20Object%5D&name=1.5-04%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F%E4%BB%A3%E7%A0%81%E8%A7%84%E5%BE%8B.png&originHeight=475&originWidth=716&originalType=binary&ratio=1&rotation=0&showTitle=false&size=90685&status=done&style=none&taskId=ue090a59e-318c-4192-8664-1edb48f6109&title=&width=179)<br /> }<br /> //交换索引j位置和minIndex位置<br /> var temp = arr[j];<br /> arr[j] = arr[minIndex];<br /> arr[minIndex] = temp;<br /> }<br /> //输出一次<br /> console.log(arr);<br /> </script><br />升级版<br /> <script><br /> function selectSort(arr){<br /> var len = arr.length;<br /> var index;<br /> for(var j=0;j<len-1;j++){<br /> index=j;<br /> for(var i=j+1;i<len;i++){<br /> if(arr[index]>arr[i]){//寻找最小值<br /> index=i;//保存最小值的索引<br /> }<br /> }<br /> if(index!=j){<br /> var temp =arr[j];<br /> arr[j]=arr[index];<br /> arr[index]=temp;<br /> }<br /> }<br /> return arr;<br /> }<br /> var arr = [6,4,9,8,1,3,2]<br /> console.log(selectSort(arr));<br /> </script>
.