第一次写博,技术又菜,可能很多自己理解的东西与他实际的意义相差甚远,若有错误之处请看官们斧正
1. 冒泡排序
var arr = [8,2,44,7,78,6];
//一共比较六轮
for(var i = 0; i < arr.length;i++){
//每一轮比较的次数
for(var j = 0; j < arr.length-i-1;j++){
//判断前后两数是否符合交换条件
if(arr[j] > arr[j+1]){
**var a = arr[j+1]; //j+1的值赋给a
arr[j+1] = arr[j]; //j的值赋给j+1
arr[j] = a; //a的值赋给j**
}
}
}
document.write(arr)
个人理解:
冒泡的排序过程为
第一次比较:8与其他五个数比较,得到8前面的数有3个(2,4,6但此时系统并没有认定2,4,6三个数的排序关系),8后面的数有2个(44,78,同样没有确定这两个数的排序关系)但第一次排序将8的位置确定为第四位
第二次比较:由于确定了8的位置,故2与除8以外的四个数进行四次比较比较,得到2前面没有数,确定2的位置为第一位,2与8之间有4,6两个数,44,78随后
第三次比较:确定44的位数为第五位
以此类推,每一次比较都会确定一个数的位置
关于循环
for(var j = 0; j < arr.length-i-1;j++)
外部循环 i 的循环不会每次都从0开始,j 每次开始一次新的循环会从0开始,而且由于每次循环会确定一个数,所以 j 的循环次数减去已确定数 i 的值,保证不会重复比较
2.选择排序
var arr2 = [3541,864,652,8486,764];
for (var i =0; i < arr2.length - 1;i++){
//从0开始,且只需要跟自己以外的数比较,所以length-1
for (var j = i+1;j < arr2.length;j++){
//i和j分别代表两个数,与冒泡的i和j不同
if(arr2[i] > arr2[j]){
var b = arr2[j];
arr2[j] = arr2[i];
arr2[i] = b;
}
}
}
document.write(arr2)
个人理解:
第一次排序将第0号元素与其他位置的数进行比较,谁比他小就放在这个位置,这个过程是动态的,比如当此位是3541的时候,第一次比较864比他小,864就放在第0号,然后864继续与其他位置进行比较,知道选中某个数,其他数都比这个数大,则确定第0号位数
(铁打的位置流水的元素)
选择排序每次外部循环必定能确定当次循环的第一位数