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;
        }
    }
  • 相关阅读:
    Linux 文件系统满,查找大文件的方法
    STM32 HAL库重新设置中断向量表后,无法进入中断的解决方法
    C指针
    vs code 代码片段设置时遇到的几个小问题
    堆排序详解
    Java final和c++ const区别
    白话经典之String字符串详解
    java之SSH框架面试
    JSTL入门指南
    LeetCode(9):Palindrome Number
  • 原文地址:https://www.cnblogs.com/x5115x/p/12637693.html
Copyright © 2011-2022 走看看