数组的插入排序

2-1.png

  1. let arr = [12, 8, 15, 16, 1, 24];
  2. // 1.先抓第一张到手里「handle也需要是一个数组」
  3. let handle = [];
  4. handle.push(arr[0]);
  5. // 2.依次去抓桌面上剩下的牌
  6. for (let i = 1; i < arr.length; i++) {
  7. // A是当前新抓的牌
  8. let A = arr[i];
  9. // 3.用每一次新抓的牌A和手里的牌handle进行逐一比较「从后向前比」
  10. for (let j = handle.length - 1; j >= 0; j--) {
  11. // B是取出来的需要和A进行比较的,手里的某张牌
  12. let B = handle[j];
  13. // 4.如果A>B,需要把新抓的牌A放在B的后面
  14. if (A > B) {
  15. handle.splice(j + 1, 0, A);
  16. // 已经放在手中了,则没必要在和手里其它牌比了,继续抓下一张牌去
  17. break;
  18. }
  19. // 5.如果和手里的牌都比完了,发现A没有比手里的任何牌大,我们把A放在最前面即可
  20. if (j === 0) {
  21. handle.unshift(A);
  22. }
  23. }
  24. }
  25. console.log(handle);

数组的快速排序

2-2.png

  1. const quick = function quick(arr) {
  2. // 4.结束条件:如果传递的数组小于一项,则无需再拆了
  3. if (arr.length <= 1) return arr;
  4. // 1.取出数组中间项
  5. let middleIndex = Math.round(arr.length / 2),
  6. middleValue = arr.splice(middleIndex, 1)[0];
  7. // 2.创建左右两个数组,用原始数组剩下的项和中间项比较,比中间项小的放在左边,大的放在右侧数组中
  8. let arrLeft = [],
  9. arrRight = [];
  10. for (let i = 0; i < arr.length; i++) {
  11. let item = arr[i];
  12. item > middleValue ? arrRight.push(item) : arrLeft.push(item);
  13. }
  14. // 3.把左边的、中间项、右侧的拼接在一起即可
  15. return quick(arrLeft).concat(middleValue, quick(arrRight));
  16. };
  17. let arr = [12, 8, 15, 16, 1, 24];
  18. arr = quick(arr);
  19. console.log(arr);

数组冒泡排序

https://www.yuque.com/go/doc/43757330