- 选择排序
var arr = [122,213,45,-67,123,-11];
for(var i = 0 ; i < arr.length-1; i++){ //外层循环控制比较的轮数,因为有6个元素,两两相比会比较5轮,这里取i<arr.length-1 即i<5,i=0也是一轮,当i=4的时候已经是第5轮。比较的时候只换值,不换位。
for(var j = i+1 ; j < arr.length; j++){ //当i=0的时候,j=i+1,也就是i为0时,j从1开始与i进行比较,j在这里是递增的,这时候i与j需要比较5次,那么当j<arr.length即j<6,j=1也是一轮,当j=5的时候已经是第5次。
if(arr[i] < arr[j]){ //arr[i] 与 arr[j] 比较
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
- 冒泡排序,冒泡排序就是将一组数组进行从小到大或是从大到小的排列方式。
var arr = [122,-213,425,67,23,-11];
for(var i = 0 ; i < arr.length-1; i++){ //外层循环控制的比较的轮数,因为有6个元素,两两相比会比较5轮,这里取i<arr.length-1 即i<5,i=0也是一轮,当i=4的时候已经是第5轮。比较的时候值需要进行交换的时候是要换位。比较的时候不需要换位的情况是两个比较的值,有一个没有它大或者没有它小的。
for(var j = 0 ; j < arr.length-1-i; j++){ //当i=0时也就是第一轮开始,还没有一个最大的数或者最小的数站位,所以j<arr.length-1-i是j<6-1-0即为j<5,j=0是第一次比较,当j=4的时候已经是第5次。第一轮比较完后是有一个数站位的,剩下5个数进行比较,需要比较4次确定下一位,这时i=1时第二轮开始,所以j<arr.length-1-i是j<6-1-1即为j<4,j=0也是第一次比较,当j=3的时候已经是第4次,依次循环。。。
if(arr[j] < arr[j+1]){ //arr[j] 与 arr[j+1] 比较
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
- 冒泡排序优化
var arr = [122,-213,425,67,23,-11];
var sum = 0; //sum是轮数
for(var i = 0 ; i < arr.length-1; i++){ //外层循环控制的比较的轮数
var flag = true; //声明一个变量,做一个标志
for(var j = 0 ; j < arr.length-1-i; j++){ //arr[j] arr[j+1]比较
if(arr[j] < arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;
}
}
//到了这,声明的那个标志变量还是true,说明里层循环一次交换都没有,一次交换都没有,说明数组已经排好了。
if(flag == true){
break;
}
sum++;
}
console.log(arr);
console.log(sum);