【排序算法】插入排序_C语言实现_Python实现

*博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足
之处也请您评论指教*

直接插入排序

下面我们介绍直接插入排序算法的原理及其代码实现,

1.1 直接插入排序的算法思想:

思想:就是从前往后依次遍历整个数组,每次将待排序的元素的按照其大小插入到前面已经排好的序列中,直到遍历整个数组完毕。

1.2 实例介绍

下面将某个实例和图片来介绍插入排序的思想和代码;

假设数组 a r r = [ 5 , 2 , 4 , 6 , 1 , 3 ] arr=[5, 2, 4, 6, 1, 3] arr=[5,2,4,6,1,3]

下方介绍的图片显示颜色为黄就是已经排好的序列,显示为蓝色就是还未排好的序列

①第0轮,从5开始,因为5的左边没有序列了,所以5就是已经排好;
在这里插入图片描述
图 1   初 始 状 态 图1~初始状态 1 

②第一轮,从2开始,因为左边的数5大于2,所以2与5交换位置;
在这里插入图片描述
图 2   第 一 轮 排 序 后 的 数 组 图2~第一轮排序后的数组 2 

③第二轮,元素值为4,4与左边已排好的序列比较,应插入到2与5之间,于是序列为顺序为2 4 5 6 1 3;
在这里插入图片描述
图 3   第 二 轮 排 序 后 的 数 组 图3~第二轮排序后的数组 3 
④同理,第三轮排序后的元素顺序为 2 4 5 6 1 3;
⑤第四轮排序后的元素顺序为 1 2 4 5 6 3;
⑥第五轮排序后的元素顺序为 1 2 3 4 5 6。

1.3 效率、稳定性和适用性

时间效率:
最好情况:
最坏情况:
空间效率:
稳定性:

1.4 代码实现

1.4.1 C语言代码

为真正改变数组在内存地址中的元素顺序,本文使用指针。(此句可看可不看

// https://blog.csdn.net/t4ngw
#include<stdio.h>
#include<stdlib.h>
int main()
{
	void insertion_sort(int arr[],int len);
	int arr[6]={5,2,4,6,1,3}; // 待排序数组 
	int len,k; 
	len=sizeof(arr)/sizeof(int);
	insertion_sort(arr,len); // 进行直接插入排序
	printf("插入排序最终的元素顺序:");
	for(k=0;k<len;k++) // 依次输出排序后的数组元素 
	{
		printf("%d ",arr[k]);
	}
	return 0;
} 

// 直接插入排序 
void insertion_sort(int arr[],int len)
{
	int i,j,k,key;
	int *p=arr; 
	for(i=1;i<len;i++) // 遍历数组 
	{
		key=*(p+i);
		j=i-1;
		while(j>=0&&*(p+j)>key) // 待排序元素与前面已排好序元素比较 
		{
			*(p+j+1)=*(p+j);
			j=j-1;
		}
		*(p+j+1)=key;
	
	// 测试每轮的排序情况 
	printf("第%d轮",i);
	for(k=0;k<len;k++) // 依次输出每一轮排序后的数组元素 
	{
		printf("%d ",arr[k]);
	}
	printf("\n");
	}

}

博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教
在这里插入图片描述

图 4   代 码 运 行 结 果 图4~代码运行结果 4 

1.4.2 Python代码

def insertionsort(A):
    for j in range(1,len(A)):
        key = A[j]
        i = j - 1
        while i >= 0 and A[i] > key:
            A[i+1] = A[i]
            i = i - 1
            A[i+1] = key
    return A            
A = []   
n = int(input("请输入你需要排序的数组的长度:"))  
for i in range(0,n):
    B = int(input("请依次输入你需要排序的数组元素:"))
    A.append(B)
print(insertionsort(A))

结果

输入要排序的数组及其长度
[5, 2, 4, 6, 1, 3]

请输入你需要排序的数组的长度:6

请依次输入你需要排序的数组元素:5

请依次输入你需要排序的数组元素:2

请依次输入你需要排序的数组元素:4

请依次输入你需要排序的数组元素:6

请依次输入你需要排序的数组元素:1

请依次输入你需要排序的数组元素:3
[1, 2, 3, 4, 5, 6] 

1.5 参考文献

[1]王道论坛. 2022年数据结构考研复习指导[M]. 北京:电子工业出版社, 2021.
[2]Thomas H.Cormen / Charles E.Leiserson / Ronald L.Rivest / Clifford Stein. 算法导论[M]. 原书第3版. 机械工业出版社, 2013.


写在最后面的话,此博客为个人通过书本和互联网作为学习资源自己整理而成的笔记,仅作为知识记录及后期复习所用,如有错误,还望评论指教 ——t4ngw.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值