选择排序原理:
第一轮中,先假设最小数字的索引是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 /><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>
.