排序的种类
常见的排序算法
直接插入排序
思想
想象下你正在打扑克牌,抓牌时候没有捋牌的顺序,抓完牌开始捋牌,从左向右把牌排好,整个过程就有和直接插入排序类似。
具体思想就是:
将待排序序列分成两个序列,前面的序列保持有序,依次选取后面的序列的元素,在前面的序列中进行插入。
初始时,有序序列的长度为1
排序步骤
给定初始序列:
{9,10,7,6,9,2,3,1,5}
那么初始状态如下:
那么分为两个部分如下:
第一步
数组第一个元素和第二个元素进行比较,比较后排序完毕。
排序完毕成为一个新的部分,如图。
第二步
将新的部分与下一个元素进行比较,重新拍序重组。
重组后组成新的部分。
之后进行重复,进行排序
第三步
······
第四步
·····
最后排序完毕后
插入排序的实现
void InsertSort(int* a, int n)
{
for (int i = 0; i < n - 1; i++)
{
int end = i;
int tmp = a[end + 1];
while (end >= 0)
{
if (tmp < a[end])
{
a[end + 1] = a[end];
end--;
}
else
{
break;
}
}
a[end + 1] = tmp;
}
}
插入排序和冒泡排序的区别
思想上:
冒泡排序是两两比较进行排序,时间复杂度为O(n^2)
插入排序最开始两个比较,之后组成两部分之后再进行排序
直观理解
冒泡排序
插入排序