• 交互设计算法基础(5)- Straight Insertion Sort


      基本思想:将待排序的无序数列看成是一个仅含有一个元素的有序数列和一个无序数列,将无序数列中的元素逐次插入到有序数列中,从而获得最终的有序数列。

      算法流程

      1)初始时, a[0]自成一个有序区, 无序区为a[1, ... , n-1], 令i=1;
      2)将a[i]并入当前的有序区a[0, ... , i-1];
      3)i++并重复2)直到i=n-1, 排序完成。

      时间复杂度:O(n^2)。

      说明:如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

    方法一:

    void StraightInsertionSort1(int a[], int n) {
      int i, j, k;
      for (i=1; i<n; i++) {
        for (j=0; j<i; j++)
          if (a[i] < a[j])
            break;
        if (j != i) {
          int temp = a[i];
          for (k=i-1; k>=j; k--)
            a[k+1] = a[k];
          a[j] = temp;
        }
      }
    }

    方法二:

    void StraightInsertionSort2(int a[], int n) {
      int i, j, k;
      for (i=1; i<n; i++)
        if (a[i] < a[i-1]) {
          int temp = a[i];
          for (j=i-1; j>=0 && a[j]>temp; j--)
            a[j+1] = a[j];
          a[j+1] = temp;
        }
    }

    方法三:

    void StraightInsertionSort3(int a[], int n) {
      for (int i=1; i<n; i++)
        for (int j=i-1; j>=0 && a[j]>a[j+1]; j--) {
          int temp = a[j];
          a[j] = a[j+1];
          a[j+1] = temp;
        }
    }
  • 相关阅读:
    vue-nuxtjs
    mongodb4.0支持事务
    promisify,promisifyAll,promise.all实现原理
    nodejs, 阿里oss上传下载图片
    数据库备份与还原
    SQL 数据类型、约束、索引及视图
    数据库的查询
    数据库(增、删、改、查)
    数据库基础知识
    C#语言小结
  • 原文地址:https://www.cnblogs.com/x5115x/p/12637693.html
Copyright © 2020-2023  润新知