算法:假设有n个人排成一行,每人手里都有一个数字,第一个人跟后一个人说你手里的数学比我小(大)吗?回答说小,两个人就互换了位置,一队下来是n-1次比较,
最终使得最后一个人手里的数字是最小(大)的。即 每一小循环(轮)确定一个最小或最大的数!
代码: 假设,总比较数量有s个数,当轮要比较数n=(s-i)个,则得比较s-1轮(外层循环),每轮比较n-1次(内层循环)
var arr=[311,42,33,5,21,6,7,312];
console.log(arr);
for (var i=0;i<arr.length-1;i++){ // 轮:s-1轮
for (var j=0;j<arr.length-i-1;j++){ //比较次数: (s-i)-1比较次数
if(arr[j]>arr[j+1]){//交换逻辑
var sub=arr[j+1];
arr[j+1]=arr[j];
arr[j]=sub;
}
}
}
console.log(arr);
点击查看代码