排序算法(1):插入排序

输入:n个数的一个序列(a1,a2……an)。
输出:输入序列的一个排序(a1,a2,……,an),满足a1<=a2<=……an。

首先,对于少量元素的排序,插入排序是一种有效的算法。举个生动的例子,插入排序就像我们手里刚刚分到的扑克牌,乱序。我们会将排由左到右进行整理,由小到大排序。
待排序列

5 4 3 9 7 5 3 2 1

(1)第一次操作由第2个元素开始,跟第一个元素比较,产生序列(前第一个黑体元素为待排元素,下同)
4   4 5 3 9 7 5 3 2 1

(2)第二次操作由第三个元素开始,跟第二个元素比较,3<5,5向后移一个单位,之后再跟第一个元素比较3<4,4向后移一个单位,产生序列
3   3 4 5 9 7 5 3 2 1

(3)第三次操作由第四个元素开始,跟第三个元素比较,9>5,停止比较,产生新的序列
9  3 4 5 9 7 5 3 2 1

(4)之后每次操作同上诉产生的新序列分别如下:
第五个元素操作后序列:7   3 4 5 7 9 5 3 2 1 
第六个元素操作后序列:5 3 4 5 5 7 9 3 2 1
第七个元素操作后序列:3 3 3 4 5 5 7 9 2 1
第八个元素操作后序列:2 2 3 3 4 5 5 7 9 1
第九个元素操作后序列:1 1 2 3 3 4 5 5 7 9

其算法过程:

 
INSERTION_SORT(a,n)
{
for(i=2;i<=n;i++)
{
kry=a[i];
j=i-1;
while(j>0&&key<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=key;
}
}

其实现代码:

#include <stdio.h>
#include <stdlib.h>
int InsertionSort(int A[10],int n)
{
    int i,j,key;
    for(i=2;i<=10;i++)
    {
        key=A[i];
        for(j=i-1;j>0;j--)
            while(A[j]>key)
            {
                A[j+1]=A[j];
                j=j-1;
                A[j+1]=key;
            }
    }
    return A[10];
}
int main(){
    int A[10],i;
    for(i=1;i<=10;i++)
        scanf("%d",&A[i]);
    InsertionSort(A,10);
    for(i=1;i<=10;i++)
        printf("%d ",A[i]);
    return 0;
}



“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值