zoukankan      html  css  js  c++  java
  • 交互设计算法基础(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;
        }
    }
  • 相关阅读:
    django第八天总结
    获取文件名的基本信息
    单个文件上传与多个文件上传
    return .php
    upload.php
    string.php
    upload.php
    upload.html
    获取上传文件
    那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM
  • 原文地址:https://www.cnblogs.com/x5115x/p/12637693.html
Copyright © 2011-2022 走看看