选择排序法
<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>