活动地址:CSDN21天学习挑战赛
这里写目录标题
一.直接插入排序
1.定义(概念)
是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表
2.逻辑
2.1.1 文字逻辑
每次需要插入的元素与序列中的每个元素进行比较,如果小了则往前移,如果大了则往后移,直到选到该序列最合适的位置,然后插入进去。
通俗的解释: 打扑克时,抓牌的情景,首先抓到一张J,第二次抓到一张Q,Q比J大,所以Q插到J的后面,第三次抓到一张10,10比Q小,又比J小,所以10插到最前面,依次逻辑…
2.1.2图片解析
3.代码
算法代码
for (i = 1;i < sz;i++)
{
int j = i-1; //arr[i]与前面一个数比较
tmp = arr[i]; //利用tmp进行监视
while (tmp < arr[j])
{
arr[j+1] = arr[j]; //元素向右移
j--; //j向左移,寻找arr[i]的合适位置
}
arr[j+1] = tmp; //将arr[i]元素插入到合适的位置
}
完整代码实现
#include <stdio.h>
int main()
{
int arr[] = { 11,34,20,10,12,35,41,32,43,14 };
int tmp = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0, k = 0;
for (i = 1;i < sz;i++)
{
int j = i-1; //arr[i]与前面一个数比较
tmp = arr[i];
while (tmp < arr[j])
{
arr[j+1] = arr[j]; //元素向右移
j--;
}
arr[j+1] = tmp;
}
for (i = 0;i < sz;i++)
printf("%d ", arr[i]);
return 0;
}
4.时间复杂度和空间复杂度分析
1. 时间复杂度
- 最坏的情况
时间复杂度为O(n^2) - 最好的情况
时间复杂度为O(n) - 平均情况
时间复杂度为O(n^2)
2.空间复杂度分析
只使用了一个临时变量 tmp,所以空间复杂度为O(1)。
5.参考文章
@一头小山猪
http://t.csdn.cn/8w2Yt