ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js冒泡、选择、插入排序

2022-06-13 20:00:30  阅读:141  来源: 互联网

标签:arr 插入排序 js 序列 length 冒泡 有序 var 排序


  • 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等
  • 数组排序的第一类,思路是将数组分为有序区和无序区两块算法过程,就是通过 遍历+比较+交换 将无序区的数移动到有序区。移动到有序区的,数都是当前无序区的,最大值或者最小值 (无序区的极值)

1、冒泡排序: 冒泡排序是一个,无序区在前,有序区在后的算法如果从小到大排序,每轮比较,都要把当前无序区的最大值移动到有序区。

  • 冒泡排序的规律
    外层循环比较的是轮数, 也叫趟数
    1、规律:对于一个长度为length数组,需要比较 length - 1 趟
    2、原因:每轮都会排好一个,到最后一个时就不用排了
    3、规律:每趟需要比较的次数 == length - 轮数 - 1
    4、原因:每轮的无序区的数 == length - 轮数
    由于是两两比较,因此,每轮比较的次数 == 无序区数 - 1
    5、总循环次数 = 1 ==》 length - 1 的累加和 = length - 1 * length / 2
  for(var i = 0; i < arr.length - 1; i++) {
        for(var j = 0; j < arr.length - i - 1; j++) {
            if(arr[j] > arr[j + 1]) {
                // 大就交换位置
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
       }
 }

2、选择排序:有序区在前,无序区在后

  • 选择排序执行规律:
    首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

    再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

 for(var i = 0 ; i < arr.length - 1; i++){
        //定义当前轮的最小值,为有序区第一个值
        var min = arr[i];
        //记录最小值下标
        var minIndex = i;
        for(var j = i + 1; j < arr.length  ; j++){
            if(min > arr[j]){
                min = arr[j];  // min保存最小值
                minIndex = j;  //minIndex保存最小值下标
            }
        }
        // 判断如果 minIndex != i 就交换位置
        if(minIndex != i){
            var temp = arr[i];
            arr[i]   = arr[minIndex];
            arr[minIndex] = temp;
        }
    }

3、插入排序:是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

  • 插入排序执行规律:
    将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面)
 for (var i = 1; i < arr.length; i++) {
        //定义变量保存要比较的数
        var now = arr[i];
        //保存当前的位置
        var j = i;
        // 循环次数不确定用while循环
        //升序   now < arr[j - 1]
        //降序   now > arr[j - 1]
        while (j && now < arr[j - 1]) {
            //如果now比左边一位小,就将左边向右移动一位
            arr[j] = arr[j - 1];
            j--;
        }
        //将now放入arr[j]的位置
        arr[j] = now; 
    }

标签:arr,插入排序,js,序列,length,冒泡,有序,var,排序
来源: https://www.cnblogs.com/liujianjun/p/16372142.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有