选择排序法

<pre>

<script type="text/javascript">

//选择排序法从小到大排序

/*算法原理:

        把一组元素中最小的一个调到第一个位置,然后问题规模缩小一个。

继续在剩下的N-1个元素中选择最小的放到第一位(也就是整体的第二位)。

重复以上步骤N-1次完成排序

   

假设有数组: [7,6,9,5,3]; 对于N个元素数组需要进行 N-1次比较

第一轮

用索引号为0的与余下N-1个比较。

用索引为0的7和索引为1的6比较后交换位置

[6,7,9,5,3];

用索引为0的6与索引为2的9比较不动

用索引为0的6与索引为3的5比较交换位置

[5,7,9,6,3];

用索引为0的元素与索引为4的3进行比较交换位置

[3,7,9,6,5];

第一轮全部比较交换完毕,结果就是选择出了最小的一个在最前面。

   

第二轮

从索引为1的与索引为2的开始比较因为第一轮已经确定了索引为0的为最小的

第一轮结果为:[3,7,9,6,5];下面开始第二轮

用索引为1的与索引为2的比较不动

[3,7,9,6,5]

用索引为1的与索引为3的比较结果交换

[3,6,9,7,5]

用索引为1的与索引为4的比较结果交换

[3,5,9,7,6]

第二轮比较完毕后,前两个确定下来进入第三轮

   

第三轮

从索引为2的与索引为3的比较,结果交换

[3,5,7,9,6]

从索引为2的与索引为4的比较结果交换

[5,3,6,9,7];

        第三轮比较后确定了前三个。

   

第四轮:

从索引为3的与索引为4的比较结果交换

[3,5,6,7,9];

比较完毕交换结束,排序完成。

*/

 

//选择排序法代码实现:

var arr = [7,6,9,5,3];

for(var i=0;i<arr.length-1;i++){        

var n =i;

document.writeln("------第 "+(i+1)+" 轮---------");         

        for(var j=i+1;j<arr.length;j++){

if(arr[n]>arr[j]){

n=j;                                //把最小的那个元素的索引保存到n上        

}        

}

//如果n没有发生变化说明最原始的那个就是最小的

if(n!=i){

t = arr[i];

arr[i]=arr[n];

arr[n]=t;

}

document.writeln(arr);         

}

</script>

posted @ 2017-09-05 09:09  lison-note  阅读(190)  评论(0编辑  收藏  举报