插入排序,你会插入吗?

Posted 爱码有道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序,你会插入吗?相关的知识,希望对你有一定的参考价值。

大家好,我是道哥,今天我们来聊插入排序。
插入排序的典型场景是玩扑克牌,所有的人肯定都玩过。那么,我们如何做到手上的牌都是排好序的呢?让我们一起看看其中蕴含的插入技巧。

图解插入

我们以5个美女为例,初始顺序如下:
插入排序,你会插入吗?

接下来,针对这5位美女,我们的任务是对她们进行插入排序,分别让她们找到自己的位置。人生,也是一个不断找到自己位置和归宿的过程。

第1步:
我们把J 放在最左边,如下:
插入排序,你会插入吗?

第2步:
我们要安排A的位置,发现A比J大,所以把A放在J的右边,如下:
插入排序,你会插入吗?

3步:
我们要安排10的位置,从最左边开始比较,发现10比J还小,所以放在J的左边,如下:
插入排序,你会插入吗?

第4步:
我们要安排K的位置,从最左边开始,发现K比10大,所以必须放在10的右边,进而又发现K比J大,所以继续放到J的右边,然后发现K比A小,所以放到A的左边,如下:
插入排序,你会插入吗?

第5步:
我们要安排Q的位置,从最左边开始,发现Q比10大,所以必须放在10的右边,进而又发现Q比J大,所以继续放到J的右边,然后发现Q比K小,所以就放到K的左边,如下:
插入排序,你会插入吗?

到此为止,我们就完成了这5个美女的排序,这是一个不断插入正确位置的过程,这就是所谓的插入排序。
插入排序本质就是,针对每一个美女,找到她自己的位置,并插入这个位置,而这个找自己位置的过程,是从左到右不断比较来确定的。

编程实现

接下来,我们依据上述插入排序的思路,写出C++代码并进行测试验证,如下:
  
    
    
  
#include<iostream> using namespace std; void insertSort(int a[], int n) { int i, j, pivotKey; for(i = 1; i < n; i++) //第i个待插入的元素 { pivotKey = a[i]; for(j = i - 1; j >= 0 && a[j] > pivotKey; j--) { a[j + 1] = a[j]; }
    a[j + 1] = pivotKey; } } int main() { int a[] = {20, 50, 10, 40, 30}; insertSort(a, 5); int i; for(i = 0; i < 5; i++) { cout << a[i] << " "; }
cout << endl;   return 0; }
结果:10 20 30 40 50 
插入排序 的思路挺简单 我们也会一步一个脚印,争取每篇文章讲清讲透一件事,也希望大家阅读后有所收获,心情愉快。

你好,我是道哥,CSDN前30名,曾混迹于BAT大厂。公众号讲解计算机基础、网络、数据结构、算法、C++、Java等多方面的编程知识。欢迎点击名片关注道哥,感谢点赞和在看支持哦。