1.插入排序
1.什么是插入排序
插入排序就是把待排序的元素插入到已经的序列中,直到所有的元素插入完全,就得到了一个有序序列。这个过程就类似整理扑克牌
2. 插入排序的思路
这里使用A1,A2,A3……代表第一个数,第二个数,第三个数
1.可以把A1直接看成有序列表,从A2开始排序
2.把A2和A1比较,使用tmp记录A2的值
如果A1比较大:让A1向前挪动一位放在A2的位置,然后让tmp和A0比较,因为A0不存在,所以直接将第一个位置赋值为tmp
如果A1比较小:直接让第二个位置赋值为tmp
3.将A3,A4……依次插入,重复类似2步骤的操作
例如:下面要排序:4 ,3,7,1
3.插入排序的实现
- 这个代码的关键是把[0,end]看作有序,将end+1插入到前面的序列中
- 首先让end=0,[0,0]是有序的,将end+1位置的数插入到前面(int tmp = a[end+1])
- 如果tmp<a[end],a[end+1] = a[end],end--(end>=0循环继续)
- 如果tmp>=a[end],退出循环
- 将a[end+1] = tmp。如果因为end<0退出循环,那么end+1=0,相当于a[0] = tmp;如果因为tmp>=a[end]退出循环,那么a[end+1] = tmp就是合理的
int end = 0;
int tmp = a[end + 1];
while (end >= 0) {
if (tmp < a[end]) {
a[end + 1] = a[end];
end--;
}
else
break;
}
a[end + 1] = tmp;}
- 让end++重复实现上面步骤
// 直接插入排序
void InsertSort(int* a, int n)
{
for (int end = 0; end < n - 1; end++) {
int tmp = a[end + 1];
while (end >= 0) {
if (tmp < a[end]) {
a[end + 1] = a[end];
end--;
}
else
break;
}
a[end + 1] = tmp;
}
}