插入排序

插入排序

将目标元素插入到前方有序序列中合适的位置,插入一次,有序序列长度加一,就是你打牌整理牌序的过程。

伪代码

INSERTION_SORT(A)
    for j = 2 to A.length
        key = A[j]
        i = j - 1
        while i > 0 and A[i] > key
            A[i+1] = A[i]
            i = i - 1
        A[i+1] = key

python

A = [5,2,4,6,1,3]
print("排序前", A)
j = 1
while j < len(A):
    key = A[j]
    i = j - 1
    while i >= 0 and A[i] > key:
        A[i+1] = A[i]
        i = i - 1
    A[i+1] = key
    j = j + 1
print("排序后", A)

c++

#include <iostream>
using namespace std;
int main()
{
    int A[] = {5,2,4,6,1,3};
    cout << "排序前 ";
    for(int i = 0; i < 6; i++)
    {
        cout << A[i] << " ";
    }
    cout << endl;
    for(int j = 1; j < 6; j++)
    {
        int key = A[j];
        int i = j - 1;
        while(i >= 0 && A[i] > key)
        {
            A[i+1] = A[i];
            i = i - 1;
        }
        A[i+1] = key;
    }
    cout << "排序后 ";
    for(int i = 0; i < 6; i++)
    {
        cout << A[i] << " ";
    }
    return 0;
}

算法分析

运行时间

  • 依赖于输入的顺序,最好顺序,最差逆序
  • 依赖于输入的规模
    • 将运行时间看作以输入规模为参数的函数
  • 时间上界,对用户的承诺
  • 时间复杂度$\theta(n^2)$
posted @ 2019-05-02 11:33  vito_wang  阅读(122)  评论(0编辑  收藏  举报