插入排序之直接插入排序

直接插入排序思想:将一个记录插入到已经排好序的记录中,从而得到一个有序的,记录数增一的有序表。
我理解的排序思想:从小到大排列
①从数组第二个数开始,先比较第二个数与第一个数,若第一个数比第二个数大,则交换位置(因为会覆盖,所以提前记录下第二个数,表示为临时数)。//此处可看出,逐步将一组数最前面的数据处理成了一组有序的数列
②第三个数(此处标记为记录的 临时数)与第二个数比较,第一个数与第三个数(临时数)比较,交换位置。
③…(规律如此)直到比较完。
话不多说,直接上代码,
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/* 直接插入排序 */
void insert_sort(int *ttr,int num)
{
int i,j,temp;
for(i = 1;i < num;i++)//此处i表示记录数+1
{
temp=ttr[i];//将第二个数暂存在temp临时数中
for(j = i - 1;(j>=0)&(ttr[j]>temp);j–)//从记录数开始,从后往前逐一比较
{
ttr[j+1]=ttr[j]; //交换位置
}
ttr[j+1]=temp;//一轮排序后,临时数归位
}
}
int main()
{
int str1[10] = {5,2,4,9,3,8,7,1,6,0};
int integer,i;
integer = sizeof(str1) / sizeof(int);
insert_sort(str1,integer);
for(i=0;i<integer;i++)
{
printf("%d\t",str1[i]);
}
printf("\n");
system(“pause”);
return 0;
}

注:
时间复杂度
最好情况:O(n)
平均情况:O(n2) //n的平方
最坏情况:O(n2) //n的平方
空间复杂度:O(1)
稳定性:比较稳定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值