• JS排序算法


     1. 冒泡排序

     数组相邻元素进行比较,每次比较将最大/最小的值冒泡到应在的位置,经过n-1次比较后,数组变为有序数组。

    1. function bubble(arr) {
    2. let temp;
    3. for (let i = 0; i < arr.length - 1; i++) {
    4. for (let j = 0; j < arr.length - 1 - i; j++) {
    5. if (arr[j] > arr[j + 1]) {
    6. temp = arr[j];
    7. arr[j] = arr[j + 1];
    8. arr[j + 1] = temp;
    9. }
    10. }
    11. }
    12. return arr;
    13. }

    2.选择排序

    每次比较一轮,将比较的结果(最大值或者最小值)放在应在的位置。

    1. function selectSort(arr) {
    2. let min;
    3. for(let i = 0; i < arr.length; i++) {
    4. // 将当前位置设为最小值
    5. min = i;
    6. for(let j = i + 1; j < arr.length; j++) {
    7. // 遍历数组其他元素,查看有没有更小的
    8. if (arr[j] < arr[min]) {
    9. min = j;
    10. }
    11. }
    12. // 如果当前位置不是最小值,那么交换位置
    13. if (min !== i) {
    14. const temp = arr[min];
    15. arr[min] = arr[i];
    16. arr[i] = temp;
    17. }
    18. }
    19. return arr;
    20. }

    3.  插入排序

    将未排序的元素插入到已排序的数组中去,最后形成一个排序数组。

    1. function insertSort(arr) {
    2. let value, i, j;
    3. for(i = 0; i < arr.length; i++) {
    4. value = arr[i];
    5. // 比较排序的数组和当前元素
    6. // 从排序数组最后一项开始比较,如果大于当前值,则向后移一位
    7. // 直到当前值大于排序数组的某一个值
    8. for(j = i - 1; j > -1 && arr[j] > value; j--) {
    9. arr[j + 1] = arr[j];
    10. }
    11. arr[j + 1] = value;
    12. }
    13. return arr;
    14. }

     4. 合并排序

    将两个已经排序的数组合并成一个有序的数组。

    1. // 合并两个数组
    2. function merge(left, right) {
    3. let i = 0, j = 0;
    4. const result = [];
    5. while(i < left.length && j < right.length) {
    6. if (left[i] < right[j]) {
    7. result.push(left[i++]);
    8. } else {
    9. result.push(right[j++]);
    10. }
    11. }
    12. return result.concat(left.slice(i), right.slice(j));
    13. }
    14. // 将数组拆分成若干个数组,两两合并
    15. function mergeSort(arr) {
    16. if (arr.length === 1) {
    17. return arr;
    18. }
    19. const middle = Math.floor(arr.length / 2);
    20. const left = arr.slice(0, middle);
    21. const right = arr.slice(middle);
    22. return merge(mergeSort(left), mergeSort(right));
    23. }

     5. 快速排序

    快速排序通过选择一个基准值将数据进行分割,使得小于基准值的数据在一个数组中,大于基准值的数据在另一个数组,然后递归这两个数组直到排序完成。

    1. function getPosition(arr, left, right) {
    2. let pointer = arr[left];
    3. while (left < right) {
    4. while (left < right && arr[right] > pointer) {
    5. right--;
    6. }
    7. arr[left] = arr[right];
    8. while (left < right && arr[left] <= pointer) {
    9. left++;
    10. }
    11. arr[right] = arr[left];
    12. }
    13. arr[left] = pointer;
    14. return left;
    15. }
    16. function quickSort(arr, left, right) {
    17. if (left < right) {
    18. let pos = getPosition(arr, left, right);
    19. quickSort(arr, left, pos - 1);
    20. quickSort(arr, pos + 1, right);
    21. return arr;
    22. }
    23. }
  • 相关阅读:
    南京邮电大学高级语言程序设计实验四(一维与二维数组实验)
    19. 内置 Tomcat 配置和切换
    LeetCode_动态规划_困难_552.学生出勤记录 II
    第二章、dubbo 框架(直连方式 dubbo)
    MUI学习之路---了解MUI,MUI的第一个项目和页面的跳转
    参考图像彩色化网络修改流程(自用版)
    Chromium CC渲染层工作流详解
    数据增强方法汇总
    【669. 修剪二叉搜索树】
    定义一个结构体,并使用结构体的方式保存这些数据。使用结构体的方式读取打印学号为 090098 与 090010 同学的各种信息
  • 原文地址:https://blog.csdn.net/foradmin/article/details/95530472