1.时间复杂度 n^2,但是少量数据的情况下比归并排序要好,因为归并排序的常数因子很大!
2.原址排序
void insert_sort(int date[], int n)
{
int key;//待插入的值
int i;
int j;
for (j = 0; j < n; ++j)
{
key = date[j];//待插入的值
i = j - 1;//当前位置的前一个位置
while (i >= 0 && date[i] > key)//升序排序
{
date[i+1] = date[i];
date[i] = key;
--i;
}
}
}
思想:设想一下,桌子上有一堆背着的牌(类似于一个等待排序的数组),然后呢,你开始拿到第一张牌并置入你的左手,你要记住,你的左手中的牌永远都是有顺序的(升或降序),你的右手
拿起要插入的牌(这就是上面的key=date[j]).下面当你右手拿起一张待插入的牌时,怎么进行你的左手手牌中?因为你左手中的手牌已经有顺序的(假设为升序),两种情况:
再设一个约定:约定右手中的牌在进入左手中的牌时,是从右到左的顺序进行的(毕竟这样比较符合我们的动作-。-)
1)右手的牌比左手中的牌的最靠右边的牌要大,那么直接把右手的牌放入即可date[j];
插入排序的实现
最新推荐文章于 2021-11-26 20:53:33 发布