插入排序

每次将一个待排序的元素按其关键字大小插入到已排好的序列中,直到全部插入完毕

直接插入排序:适用于链表,顺序表

折半插入排序:只适用于顺序表

性能:最好O(n),最坏O(n^2)

稳定性:稳定


插入排序

void InsertSort(int A[], int n) //表与表长
{
    int i, j, temp, i1;
    for (i = 1; i < 8; i++)//元素从下表0开始,共比较n-1趟
    {//升序
        for (j = i; j > 0; j--)
        {
            if (A[j] < A[j - 1]) //如果后者小于前者
            {
                temp = A[j];
                A[j] = A[j - 1];
                A[j - 1] = temp;//前后交换
            }
        }
        printf("第%d趟排序的序列为:", i);
        for (i1 = 0; i1 < 8; i1++)
        {
            printf("%d ", A[i1]);
        }
        printf("\n");

    }
}

首先指向第二个元素,为了与第一个元素相比较。若小于第一个元素,则将它与第一个元素互换。第二次循环,指向第三个元素,将第三个元素作为内层循环的最后一个元素,并且依次与前面的元素相比,若小于前面的某一个元素,则互换,并且从互换的位置,继续向前对比,直到表头为止。可以是升序也可以是降序。

全部代码

#include<stdio.h>
#include<stdlib.h>
#define maxsize 10
#define initsize 10
#pragma warning(disable:4996)
#pragma warning(disable:5208)

void InsertSort(int A[], int n) //表与表长
{
    int i, j, temp, i1;
    for (i = 1; i < 8; i++)//元素从下表0开始,共比较n-1趟
    {//升序
        for (j = i; j > 0; j--)
        {
            if (A[j] < A[j - 1]) //如果后者小于前者
            {
                temp = A[j];
                A[j] = A[j - 1];
                A[j - 1] = temp;//前后交换
            }
        }
        printf("第%d趟排序的序列为:", i);
        for (i1 = 0; i1 < 8; i1++)
        {
            printf("%d ", A[i1]);
        }
        printf("\n");

    }
}

int main()
{
    int A[8] = { 49,38,65,97,76,13,27,49 };
    int n = 8;
    printf("开始排序:\n");
    InsertSort(A, n);
    printf("插入排序的最终序列是");
    for(int i=0;i<8;i++)
    {
        printf("%d ", A[i]);
    }

}

钦此

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值