// 冒泡排序:相领两个元素比较 符合条件的不变 , 不符合条件则调换两个元素位置
// 如let arr = [4,3,1,2,5,8,6] 如果条件以升序排列 则第一次比较arr[0]>arr[1] 则调换两个元素位置 此时arr[1] == 4 arr[1]>arr[2]?继续第一步操作:比较arr[2] arr[3]
// 代码实现
function sort(arr){
for(let i = 0 ; i < arr.length ; i++){
for(let j = 0 ; j < arr.length - 1 ; j++){
if(arr[j]>arr[j+1]){
let temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
}
sort([4,3,1,2,5,8,6]);
// 优化1:列如数组[4,1,6,7,8,9] 这个数组只需要移动一步就能成为有序数组 但是每次进入第二个for循环都需要两两相互比较
//定义一个boolean型变量 如果在第二层for循环中 相邻两个元素比较都为false 则此时的数组已经是有序数组了 跳出循环
function sort_a(arr){
for(let i = 0 ; i < arr.length ; i++){
let flag = true;
for(let j = 0 ; j < arr.length - 1 ; j++){
if(arr[j]>arr[j+1]){
let temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
flag = false;
}
}
if(flag){
break;
}
}
}
sort_a([4,1,6,7,8,9]);
// 优化2:列如数组[4,2,1,6,7,8,9] 在比较这个数组的时候 后面的 6 7 8 9 四个元素已经是有序的了 ,但是每次进入for循环 都会比较这些已经排序了的元素
// 定义一个变量 记录上一次循环比较排序时的最后一次两个相邻元素比较的数组下标 则在下一次进入for循环时 遍历数组的最大值则为这个变量 则这个变量的下标值的数组以后元素为有序
function sort_b(arr){
for(let i = 0 ; i < arr.length ; i++){
let flag = true;
let sortIndex = arr.length - 1;
for(let j = 0 ; j < sortIndex; j++){
if(arr[j]>arr[j+1]){
let temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
flag = false;
sortIndex = j;
}
}
if(flag){
break;
}
}
}
sort_b([4,2,1,6,7,8,9]);
冒泡排序
最新推荐文章于 2024-09-08 09:44:20 发布