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
  • 相关阅读:
    福大软工 · 第十次作业
    最终作业:软工实践个人总结
    第三视角Beta答辩总结
    Beta 冲刺(7/7)
    Beta 冲刺 (6/7)
    Beta 冲刺 (5/7)
    Beta 冲刺 (4/7)
    Beta 冲刺 (3/7)
    Beta 冲刺 (2/7)
    福大软工 · 第十次作业
  • 原文地址:https://www.cnblogs.com/runnyu/p/4677107.html
Copyright © 2011-2022 走看看