美文网首页
插入排序算法及其优化(Rust)

插入排序算法及其优化(Rust)

作者: 平仄_pingze | 来源:发表于2019-04-03 12:22 被阅读0次

插入排序算法的原理是,通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
开始时,认为第一个元素自身是一个有序序列。

第一版:

pub fn insertion_sort(v: &mut [i32]) {
  let len = v.len();
  for i in 1..len {
    for j in 0..i {
      if v[i] < v[j] {
        let temp = v[i];
        let mut k = i;
        while k > j {
          v[k] = v[k-1];
          k-=1;
        }
        v[j] = temp;
        break;
      }
    }
  }
}

其中,i是无序部分需要插入到有序序列的元素索引;j是对有序序列扫描的索引。

对从第二个元素开始的每个元素,都对前面的所有有序元素进行正序遍历,直到找到一个比它大的,就将自己插入这个位置。
插入的方式是,这个位置和后面的有序序列内的元素,按倒序依次向后移位;自己填入这个位置。

可以看到,实现使用了3重循环,4层嵌套。

优化的实现:

pub fn insertion_sort(v: &mut [i32]) {
  let len = v.len();
  for i in 1..len {
    let temp = v[i];
    let mut j = i;
    while j > 0 && temp < v[j-1] {
      v[j] = v[j-1];
      j -= 1;
    }
    v[j] = temp;
  }
}

按照上述逻辑,正序遍历只在找到比自己大的有序元素时,才进行操作;这可以转换为,倒序遍历,只要有序元素比自己小,就立即使之向右移位,(比自己大则不操作);最后将自己填入最后一个比自己小的元素的原位置。

如此,只需使用2重循环,2重嵌套。
(优化点在于:1. 对有序元素遍历同时进行移位;2. 将大小比较作为循环条件)

相关文章

  • 插入排序算法及其优化(Rust)

    插入排序算法的原理是,通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。开始时,认...

  • c算法O(n)^2(一)

    选择排序 插入排序 优化插入排序算法

  • 对于基础排序算法的简要总结

    本文主要分析排序算法中的选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序,以及其部分优化方式,部分代码示例...

  • 排序算法(二):希尔排序

    希尔排序是插入排序的优化版,其算法表示如下:

  • 8. 优化案例

    1. 十大经典算法及其优化2.几种常见的优化算法3. 经验之谈:优化算法两句话精炼总结

  • 「JavaScript学习笔记」 尾递归优化

    reference ES6中的尾调优化及其他相关的优化算法

  • 数据结构与算法---排序篇

    前言: 2016年5月21号开始学习排序算法及其主要思想,并通过代码实现 插入排序 插入排序有两种: 直接插入排序...

  • 插入排序及其优化

    基本思路 正如生活中整理扑克的方法:一张一张的来,将每一张扑克插入到其他已经有序的扑克中的适当位置。 Q:计算机中...

  • 希尔排序

    概念及其介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。 希尔排序又称缩小...

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

网友评论

      本文标题:插入排序算法及其优化(Rust)

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