直接插入排序

来源:互联网 发布:阿里云快速备案' 编辑:程序博客网 时间:2024/05/16 05:06

直接插入排序:将待排序序列分为有序区和无序区,不断的将无序区的元素插入有序区。插入的时候要依次比较有序区的元素找到合适的插入位置。可以顺序比较,也可以逆序比较。这里采用逆序比较方法,即把r[i]和r[i-1],r[i-2]......r[1]比较,在r[0]处设置哨兵。

#include <iostream>using namespace std;void InsertSort(int a[],int n)//n为数组能存的元素个数{    int len=n-1;    for(int i=2;i<=len;i++)//把第一个元素当成有序区,从第二个元素开始插入    {        int j;        if(a[i]<a[i-1])//与有序序列的最后一个元素比较确定是否需要向前插入        {            a[0]=a[i];//设置哨兵            a[i]=a[i-1];//将a[i]的位置空出来以便整体后移及插入            for(j=i-2;a[0]<=a[j];j--)//寻找插入位置            {                a[j+1]=a[j];            }           a[j+1]=a[0];//循环结束后a[j]<a[0],则a[j+1]为合适位置        }    }}int main(){    int a[105];    int n;    cin>>n;    for(int i=1;i<=n;i++)    {        cin>>a[i];    }    InsertSort(a,n+1);    for (int j=1;j<=n;j++)//构造一个升序序列    {        cout<<a[j]<<" ";    }    cout<<endl;    return 0;}


原创粉丝点击