插入排序(InsertSort)

本文详细介绍了插入排序算法,包括其基本思想、应用场景及实现步骤。通过示例代码展示了如何使用插入排序来整理数据序列,使其保持有序状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。
直接插入排序的算法思路:
(1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
如图:
这里写图片描述

这里写代码片
#include<stdio.h>
#include<stdlib.h>

void insertSort(int* arr, int len);
void array_show(int* arr, int len);
int main(int argc, char* argv[])
{
    int arr[10] = {4,3,8,5,2,1,6,0,7,9};
    array_show(arr, 10);
    insertSort(arr,10);
    putchar(10);
    array_show(arr, 10);

    system("pause");

    return 0;
}
/*
//1.
void insertSort(int* arr, int len ) 
{ 
for(int i=1;i<len;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分 
{ 
    int temp=arr[i];//temp标记为未排序第一个元素 
    int j=i-1; 
while (j>=0 && arr[j]>temp)//将temp与已排序元素从小到大比较,寻找temp应插入的位置
{ 
    arr[j+1]=arr[j]; 
    j--; 
} 
arr[j+1]=temp; 
} 
} 
*/
void array_show(int* arr, int len)
{
    int i ;
    for(i = 0; i != len; i ++)
    {
        printf("%d ", arr[i]);
    }
}

//2.
void insertSort(int a[], int n)
{
    int i=0,j=0;
    for(i=1; i<n; i++)
    {
        int temp=a[i];
        for(j=i-1; j>=0 && temp<a[j]; j--)
        {
            a[j+1]=a[j];
        }
        a[j+1]=temp;
    }
}

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值