Open AILINGANGEL opened 5 years ago
和归并排序中不同的地方在于合并有序数组需要在本地修改数组,而不是重新分配一个数组 本地修改nums1, 注意不当nums1没有遍历完不需要特殊处理了,因此就是在nums1上进行本地修改
var merge = function(nums1, m, nums2, n) {
let i = m - 1;
let j = n - 1;
let k = m + n - 1;
while(i > - 1 && j > -1) {
if(nums1[i] > nums2[j]) {
nums1[k] = nums1[i];
i--;
} else {
nums1[k] = nums2[j];
j--;
}
k--;
}
while(j > -1) {
nums1[k] = nums2[j];
k--;
j--;
}
};
冒泡排序
核心思想: nums[j]和nums[j+1]进行比较,如果nums[j]大于nums[j+1]就交换位置
选择排序
核心思想:假设当前位置i前面的区间已经排好序,从剩余的区间中选择最小的元素放到当前位置i
插入排序
核心思想:假设当前位置j之前的区间已经排好序,从位置j-1开始和位置j对应的数字开始比较,找到nums[j]在[0, ..., j-1]中的正确位置
归并排序
核心思想: 将一个数组对半分成两个区间,然后对这两个区间分别排序,然后将这两个区间进行合并
快排
核心思想:找到一个标杆值,通常情况下选取数组的最后一个值作为这个pivot;然后把小于它的数放在它的左边,大于它的数放在右边,并返回这个值在数组中的正确位置。然后递归的对pivot左边的区间和右边的区间分别进行排序