1、冒泡排序
var sortArray1 = function(nums) {
// 外层循环 需要多少次的冒泡 nums.length-1
// 因为第一次冒泡可以把最大的数排好,放在最后(最前),
// 第二次可以把第二大的数排好
// 依此类推,当倒数第二个数排好时,整个数组已经排序完成
for(let i=0;i<nums.length-1;i++){
// 内层循环 具体的冒泡执行 需要多少次 依此减少
// 第一次需要将最大的数放在最后,需要nums.length-1次
// 第二次需要将第二大的数放在倒数第二个位置,需要nums.length-2次
// 依次类推,知道只剩一个数的时候就不用循环了
for (let j = 0; j < nums.length-i-1; j++) {
// 此处的逻辑和i无关
// 比较第j个数和j+1个数,交换
if(nums[j]>nums[j+1]){
// 可以使用解构赋值省去中间变量
[nums[j],nums[j+1]]=[nums[j+1],nums[j]];
}
}
}
return nums;
};
2、快速排序 递归
var sortArray = function(nums){
// 递归后 中止条件
if(nums.length<=1){
return nums
}
// 取出第一项 也可以时其他项
let cur =nums[0];
let left=[];
let right =[];
// 循环剩下的项 和第一项比价 小的放left 大的放right
for(let i=1;i<nums.length;i++){
if(nums[i]>=cur){
right.push(nums[i])
}else{
left.push(nums[i])
}
}
// 递归排列left和right 知道每一项都只有一个元素 连接数组
return sortArray(left).concat([cur]).concat(sortArray(right))
}
3、leetcode 11 盛最多水的容器
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
// 求组成所有的“桶”的面积,
// 在寻找的过程中发现比存储的面积大,则替换现在存的
let max=0;
// 外层循环 所有组成桶的“左边” 共 height.length-1条
for (let i = 0; i < height.length-1; i++) {
// 内层循环 所有组成桶的“右边” 随着i的变化 逐渐变小
// 开始时为i+i,结束比i的边界多1,为height.length
for (let j = 1+i; j < height.length; j++) {
// 取“桶”高的最小值
const small = Math.min(height[i],height[j]);
// 桶的底为j-i
if(small*(j-i)>max){
max=small*(j-i);
}
}
}
return max;
};