插入排序的实现 - C语言

🚩 插入排序

💡 基本思想
每一步把待排序的元素与前面已排序的数组的元素进行比较,正确的把元素放入前面的数组
动画:插入排序

🚩 C语言的实现

// input: int *A: 待排序的数组
// 		  int size: 数组大小
// output: 已排序的数组
void InsertionSort(int *A, int size){
	for (int cmp = 1; cmp <= size - 1; cmp++){
		int key = A[cmp];
		int i = cmp - 1;
		while (i >= 0 && A[i] > key){  // compare key and the elements in the sorted array
			A[i + 1] = A[i];
			i--;
		}
		A[i + 1] = key;
	}
}

🚩 时间复杂度分析

  • The Best Case - O(N)
    输入的数据以预先排序,那么每次内层循环的检测仅需要比较判定的一步,因此时间复杂度为O(N)

  • The Worst Case - O(N^2)
    输入的数据以倒序排序,那么每次内层循环都需要与已排序的数组的每个数据进行比较,因此时间复杂度为O(N^2)
    ∑ i = 1 n i = 2 + 3 + 4 + . . . + N = O ( N 2 ) \sum_{i=1}^{n} i = 2 + 3 + 4 + ... + N = O(N^{2}) i=1ni=2+3+4+...+N=O(N2)

  • The Average Case - O(N^2)
    我们可以假设平均情况下数组中的元素都比数组中一半的元素小,则每次插入需进行 N/2 次操作,一共有 N-1 次插入操作,因此时间复杂度为O(N^2)

📖 以上均为个人学习数据结构算法时的小笔记,如有错误请多多指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值