常用算法

一、冒泡排序(将大的值往后排)

第二层for循环是比较arr[ j ]和第arr[ j+1 ]的数值大小,所以会出现arr[ j ]<=arr[ j+1 ]的情况(即 [5, 9, 2, 6, 6, 10, 7, 45])。也就是说第一层for循环只能将数组中最大的数排到最后,其他较大的数的位置并不确定
第一层for循环使得第二层循环调用(arr.length - 1)次,这样其他较大的值就会继续往后排列。

    let arr = [9, 5, 45, 2, 6, 6, 10, 7]
    for (let i= 0; i < arr.length - 1; i++) {
      for (let j = 0; j < arr.length - 1; j++) {
        if (arr[j] > arr[j+1]) {
      // 将大的值往后排
          let tem = arr[j+1]
          arr[j+1] = arr[j]
          arr[j] = tem
        }
      }
    }
    console.log(arr)

二、选择排序(将大的值往前排)

找出最大的数放在第一位,然后在剩下的数组元素中接着找出最大的数放在第二位....

第二层for循环j的值从数组第二位开始,if判断确定两个数中较大的数的序号index=j,然后用arr[index]和第二层for'循环的下一位arr[j]比较。

    let arr = [9, 5, 45, 2, 6, 6, 10, 7]
    let index = 0  // 保存第二层循环每次比较时产生的最大数的数组序号
    let tem = ''  // 保存较小的数的值
    for (let i = 0; i < arr.length - 1; i++) {
      index = i
      for (let j = i + 1; j < arr.length; j++) {
        if (arr[index] < arr[j]) {
          index = j
        }
      }
      tem = arr[i]
      arr[i] = arr[index]
      arr[index] = tem
    }
    console.log(arr)

三、插入排序(将大的值往前排)

第一层for循环拿到后一个数值
第二层for循环将第一层for循环拿到的数值与前面的数值进行比较。

    // 插入排序 后一个数和前面的数相比较,
    let arr = [9, 5, 45, 2, 6, 6, 10, 7]
    let tem = ''
    for (let i = 1; i < arr.length; i++) {
      for (let j = 0; j < i; j++) {
        if (arr[i] > arr[j]) {
          tem = arr[j]
          arr[j] = arr[i]
          arr[i] = tem
        }
      }
    }

四、希尔排序(将大的值往前排)

    // 希尔排序 后一个数和前面的数相比较,
    let arr = [9, 5, 45, 2, 6, 6, 10, 7]
    let half = parseInt(arr.length / 2)
    let tem = ''
    // 控制增量
    for (let gap = half; gap >= 1; gap = parseInt(gap / 2)) {
      console.log('-----gap:' + gap)
      // 循环增量范围内的数组
      for (let i = gap; i < arr.length; i++) {
        // 循环增量控制下的小数组内的数字
        for (let j = i - gap; j >= 0; j = j - gap) {
          console.log(j, arr[j], arr[j + gap])
          if (arr[j] < arr[j + gap]) {
            tem = arr[j]
            arr[j] = arr[j + gap]
            arr[j + gap] = tem
          }
        }
      }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容