js实现冒泡、插入、快速排序

ゝ一纸荒年。 2023-02-25 08:45 67阅读 0赞

js实现冒泡、插入、快速排序

虽然js实现排序可以直接用sort()函数实现,但是对于简单的排序算法还是要掌的,本文用简单的方法实现十种排序算法中最常见的三种。详细步骤都写在注释中。

冒泡排序

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>冒泡排序</title>
  7. </head>
  8. <body>
  9. <input type="text" name="" id="arrs" placeholder="输入需要排序的数组以,分割">
  10. <button>开始排序</button>
  11. </body>
  12. <script>
  13. var btn = document.getElementsByTagName('button')[0];
  14. btn.onclick = bubble;
  15. //处理输入框的value 转为数组形式
  16. function getarrs() {
  17. let arrValue = document.getElementById("arrs").value;
  18. let stringArr = arrValue.split(',');
  19. let arrs = [];
  20. //将分割后的字符串数组转为整型数组
  21. stringArr.forEach(element => {
  22. arrs.push(+element);
  23. });
  24. return arrs;
  25. }
  26. /* 数组当前项和后一项比较,如果当前项比后一项大,则两项交换位置(让大的靠后)即可 */
  27. function bubble() {
  28. let arrs = getarrs();
  29. let temp = null;
  30. //外层循环控制比较的轮数
  31. for (let i = 0; i < arrs.length - 1; i++) {
  32. //里层循环控制每一轮比较的次数
  33. for (let j = 0; j < arrs.length - 1 - i; j++) {
  34. if (arrs[j] > arrs[j + 1]) {
  35. temp = arrs[j];
  36. arrs[j] = arrs[j + 1];
  37. arrs[j + 1] = temp
  38. }
  39. }
  40. }
  41. console.log(arrs);
  42. }
  43. </script>
  44. </html>

插入排序

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>插入排序</title>
  7. </head>
  8. <body>
  9. <input type="text" name="" id="arrs" placeholder="输入需要排序的数组以,分割">
  10. <button>开始排序</button>
  11. </body>
  12. <script>
  13. var btn = document.getElementsByTagName('button')[0];
  14. btn.onclick = insert
  15. function getarrs() {
  16. let arrValue = document.getElementById("arrs").value;
  17. let stringArr = arrValue.split(',');
  18. let arrs = [];
  19. stringArr.forEach(element => {
  20. arrs.push(+element);
  21. });
  22. return arrs;
  23. }
  24. function insert() {
  25. let arrs = getarrs()
  26. //1.准备一个新数组,用来存储抓抓取的数组项,开始先抓数组首项进来
  27. let handle = [];
  28. handle.push(arrs[0]);
  29. //2.从第二项开始依次抓取
  30. for (let i = 1; i < arrs.length; i++) {
  31. //当前抓取的项
  32. let temp = arrs[i];
  33. // 和handle里的数依次比较
  34. for (let j = arrs.length - 1; j >= 0; j--) {
  35. //每次要比较的 handle 中的项
  36. let tempHandle = handle[j];
  37. //如果temp比tempHandle大,则放到 tempHandle后面
  38. if (temp > tempHandle) {
  39. handle.splice(j + 1, 0, temp);
  40. break;
  41. }
  42. if (j === 0) {
  43. handle.unshift(temp);
  44. }
  45. }
  46. }
  47. console.log(handle);
  48. }
  49. </script>
  50. </html>

快速排序

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>快速排序</title>
  7. </head>
  8. <body>
  9. <input type="text" name="" id="arrs" placeholder="输入需要排序的数组以,分割">
  10. <button>开始排序</button>
  11. </body>
  12. <script>
  13. var btn = document.getElementsByTagName('button')[0];
  14. btn.onclick = ac
  15. function getarrs() {
  16. let arrValue = document.getElementById("arrs").value;
  17. let stringArr = arrValue.split(',');
  18. let arrs = [];
  19. stringArr.forEach(element => {
  20. arrs.push(+element);
  21. });
  22. return arrs;
  23. }
  24. //12, 8, 15, 16, 1, 24
  25. function ac() {
  26. let ac = getarrs();
  27. console.log(quick(ac));
  28. }
  29. function quick(arrs) {
  30. if (arrs.length <= 1) {
  31. // console.log(arrs);
  32. return arrs
  33. }
  34. //1.找到数组的中间项,在原有的数组中把它移除
  35. let middleIndex = Math.floor(arrs.length / 2);
  36. let middleValue = arrs.splice(middleIndex, 1)[0];
  37. //2. 准备左右两个数组,循环剩下数组中的每一项,比当前项小的放到左边数组,反之放到右边数组中
  38. let arrLeft = [],
  39. arrRight = [];
  40. for (let i = 0; i < arrs.length; i++) {
  41. let item = arrs[i];
  42. item < middleValue ? arrLeft.push(item) : arrRight.push(item);
  43. }
  44. //3.递归方式让左右两边的数组持续这样处理,一直到左右两边都排好序为止(最后让左边+中间+右边拼接成为最后的结果)
  45. return quick(arrLeft).concat(middleValue, quick(arrRight));
  46. }
  47. </script>
  48. </html>

希望本文对你有帮助,有什么问题可以留言哦,感谢你的阅读。

发表评论

表情:
评论列表 (有 0 条评论,67人围观)

还没有评论,来说两句吧...

相关阅读