插入排序法

算法思想1:

  从第二个元素开始选取,记作temp(位置为i),拿temp和其前面的元素比较,如果temp比其前面的第一个数还大,则temp位置不变,否则一直向前比较直到找到第一个小于temp的元素,记录其位置r并不在向前比较(退出循环),然后把位置r+1到i-1元素整体向后移动,移动结束后把temp放在r+1的位置。

#include<iostream>
using namespace std;
int main()
{
    int a[]={2,1,3,5,3,11,5,7,9,12};
    int t,r;
    //插入排序
    for(int i=1;i<10;i++)
    {
            bool change=false;//用来标识是否 
            t=a[i];
        for(int j=i-1;j>=0;j--)
        {
        
            if(t<a[j])
                {
                    change=true;
                    r=j;
                } 
            else
                break; 
        }
        
            if(change)
            {
                for(int k=i-1;k>=r;k--)
                    a[k+1]=a[k];
                a[r]=t;
            }        
    } 
    
        for(int i=0;i<10;i++)
            cout<<a[i]<<" ";
} 

算法思想2:

  从第二个元素开始选取,记作temp(位置为i),拿temp和其前面的元素比较,如果temp小,则前面元素后移,直到找到第一个大于小于temp的元素,把temp插入到其面。

#include<iostream>
using namespace std;
int main()
{
    int a[]={2,1,3,5,3,11,5,7,9,12};
    int t,r;
    //插入排序
    for(int i=1;i<10;i++)
    {
            t=a[i];
            int j=i-1;
        while(j>=0 && t<a[j])
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=t;
    }
    
    for(int i=0;i<10;i++)
        cout<<a[i]<<" ";
    cout<<endl;    
} 

 

posted @ 2019-01-08 15:20  Nikel  阅读(104)  评论(0)    收藏  举报