zoukankan      html  css  js  c++  java
  • 插入排序

    基本思想

    可以把插入排序看成是摸牌。把数组分成三个部分:

    1.A[1...j-1]代表手中的牌(已经排序好了);

    2.下标j指出当前正被插入手中的牌

    3.A[j+1...n]代表仍在桌子上的牌堆

    算法开始的时候手上只有一张牌,然后每次从牌堆中拿出一张牌插入到手中的正确位置,直到牌堆的牌为空。

    每次插入时候的算法:

    因为每次插入之前我们都保证手上的牌已经排序好了,我们只要从右面开始(j-1)找到第一个比A[j]小的牌(或者没有找到就应该插到第一位),就可以找到A[j]应该插入的位置。

    伪代码

    INSERTION-SORT(A)
    for j=2 to A.length
        key=A[j]
        //Insert A[j] into sorted sequence A[1...j-1]  将A[j]插入到已排序好的队列 A[1...j-1]中 
        i=j-1
        while i>0 and A[i]>key
            A[i+1]=A[i]
            i=i-1
        A[i+1]=key

    实现跟测试代码

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void insertion_sort(int arr[],int length)
     5 {
     6     for(int j=2;j<=length;++j)
     7     {
     8         int key=arr[j];
     9         int i=j-1;
    10         while(i>0&&arr[i]>key)   //找到比key大的数就向后移一位 
    11         {
    12             arr[i+1]=arr[i];
    13             i=i-1;
    14         }
    15         arr[i+1]=key; 
    16     }    
    17 }
    18 
    19 int main()
    20 {
    21     int arr[]={0,5,2,4,6,1,3};
    22     insertion_sort(arr,6);
    23     for(int i=1;i<=6;++i)
    24         cout<<arr[i]<<' ';
    25     cout<<endl;
    26     system("pause");
    27 }
    View Code
  • 相关阅读:
    方差分析
    Rust 指定安装目录
    perl 子函数传入多个数组
    perl 获取目录信息
    R绘图布局包 customLayout
    C语言 自定义函数按行读入文件2
    C语言 自定义函数按行读入文件
    C语言按行读入文件
    sed删除指定行
    mybatis 批量更新
  • 原文地址:https://www.cnblogs.com/runnyu/p/4677107.html
Copyright © 2011-2022 走看看