美文网首页
选择、插入、计数排序

选择、插入、计数排序

作者: 围观工程师 | 来源:发表于2018-06-25 23:07 被阅读0次

    选择

    首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    for (let i = 0; i < arr.length - 1; i++) {
      let minIndex = i
      for (let j = i; j < arr.length; j++) {
        if (arr[j] < arr[minIndex]) minIndex = j
      }
      if (minIndex !== i) {
        arr[i] = arr[i] ^ arr[minIndex]
        arr[minIndex] = arr[minIndex] ^ arr[i]
        arr[i] = arr[i] ^ arr[minIndex]
      }
    }
    

    插入排序

    它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。每次循环将有序区间增加一位

    for (let i = 1; i < arr.length; i++) {
      let j = i
      while (arr[j] < arr[j - 1] && j > 0) {
        arr[j] = arr[j] ^ arr[j - 1]
        arr[j - 1] = arr[j - 1] ^ arr[j]
        arr[j] = arr[j] ^ arr[j - 1]
        j--
      }
    }
    

    计数

    用一个单独的数组的下标标记该下标在目标排序数组中出现的次数。仅限于排序整数数组。

    let indexArr = []
    for (let i = 0; i < arr.length; i++) {
      if (indexArr[arr[i]]) indexArr[arr[i]]++
      else indexArr[arr[i]] = 1
    }
    arr = []
    for (let i = 0; i < indexArr.length; i++) {
      if (!indexArr[i]) continue
      for (j = indexArr[i]; j > 0; j--) {
        arr.push(i)
      }
    }
    

    相关文章

      网友评论

          本文标题:选择、插入、计数排序

          本文链接:https://www.haomeiwen.com/subject/yfmuyftx.html