2.选择排序(用js学算法)

数组:

  • 数组带来的问题: 额外请求的数组储存空间,请求的位数少不够用,请求的位数多如果用不到会浪费。

    数组

  • 速度方面:因为数组是依次排序的,我们想取得指定位置的数组元素,只需要通过简单的数学计算就行。例如:我们要获得a[5]上的元素,我们只需要取得a[0]位置+5即可。所以需要随机获取位置元素时,数组的效率很高 【随机访问】

链表

  • 链表:链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。

    链表

  • 速度方面:链表因为无规则排序,当我们要获得a[5]元素时,我们要先获取a[0]得到a[1]地址,在通过a[1]获得a[2]地址,依次到a[5]。所以在获取所有元素时,链表的效率依然很高,但是如果需要跳跃获取(获取a[3]和a[9]),链表的效率就很低(因为要获取4,5,6,7,8)【顺序访问】

  • 另外,链表擅长删除和插入,只需要修改上个元素的内存地址指向

数组链表大O速度对比

选择排序(找最大的)

歌曲播放次数
依次找出最大的进行排序
  • 对一组数据中依次找到最大的进行排序
  • 实例:
    网上的
  var example = [1, 22, 32, 4, 555, 21, 11, 209, 33, 33]
  function selectSort(arr) {
    var len = arr.length;
    var minIndex, temp;
    console.time('选择排序耗时');
    debugger
    for (i = 0; i < len - 1; i++) {
      minIndex = i;
      for (j = i + 1; j < len; j++) {
        if (arr[j] < arr[minIndex]) {
          minIndex = j; //!!主要区别在这里:永远拿最大的数字去找另一个最大的数字!!
        }
      }
      temp = arr[i];
      arr[i] = arr[minIndex];
      arr[minIndex] = temp;
    }
    console.timeEnd('选择排序耗时');
    return arr;
  }
  console.log(selectSort(example));

我写的

  const array = [1, 22, 32, 4, 555, 21, 11, 209, 33, 33]
  const newarray = [];
  //找最大的
  function findmax(array) {
    for (const x in array) {
      let result = true;//定义变量跟踪比较结果
      for (const y in array) {
        if (array[x] < array[y]) {
          result = false
          break;
        }
      }
      if (result) {
        return x
      }
    }
  }
  //一共需要找数组个数的次数
  const length = array.length;
  for (let x = 0; x < length; x++) {
    const maxIndex = findmax(array)
    newarray.push(array[maxIndex])
    //找到放到第一个
    array.splice(maxIndex, 1)
  }

  console.log(newarray)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容