冒泡排序
按照冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相元素时,交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变
大的往右丢(往下沉),小的往左排
- 外层循环控制趟数
- 内层循环控制每一趟的交换次数
- 内部交换两个变量的值
内层for循环 第一趟的索引号是0 交换次数是4
内层for循环 第二趟的索引号是1 交换次数是3
内层for循环 第三趟的索引号是2 交换次数是2
内层for循环 第四趟的索引号是3 交换次数是1
细节优化:
// 优化1 arr.length-1
for(var i = 0;i<arr.length-1;i++){for(var j = 0;j<arr.length-1;j++){}
}//优化2 减去多余的比较次数 arr.length-1-i
for(var i = 0;i<arr.length-1;i++){for(var j = 0;j<arr.length-1-i;j++){}
}
选择排序
// 选择排序// 拿第一个值和后面的值,进行比较var list = [83, 41, 71, 45, 79];// 第一轮结束之后最小的值,放在最前面for (var i = 0; i < list.length - 1; i++) {// 假设一个i为最小值// 内层循环,控制每层做什么操作(拿本次选取的值,与后面的值比较)for (var j = i + 1; j < list.length; j++) {// 如果前面的值,比后面的大,放到最后if (list[i] > list[j]) {// 交换位置var temp = list[i];list[i] = list[j];list[j] = temp;}}}console.log('选择排序如下' + list);
选择排序优化
var list = [83, 41, 71, 45, 79];// 第一轮,找到最小的值,放到下标为0的位置// 第二轮,找到第二小的值,放到下标为1的位置// n个数,找n-1次var min = list[i];// 假设最小值list[i]var minIndex =i; // 假设最小值下标for (var i = 0; i < list.length - 1; i++) {for (var j = i + 1; j < list.length; j++) {if (list[j] < list[minIndex]) {// min = list[j];minIndex = j;}}}var temp = list[i];list[i] = list[minIndex];list[minIndex] = temp;console.log('选择排序如下' + list);