有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的,个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O (n ^ 2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想的是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
举例:相当于打扑克牌,每接一张牌然后就插入手上已排序的拍中,待接的牌相当于待排序的数:
程序算法过程示意图:
程序代码:
/* *,项目名称:sort.h *,作,,,,,,,者:邹明 *,完成时间:2016.5.20 */# ifndef __SORT_H__ # define __SORT_H__ # includeusing namespace 性传播疾病; void 打印(int [], int 大小),,//输出 { for (int j =, 0;, j<规模;,j + +) { cout & lt; & lt;, [j], & lt; & lt;,“,,”; } cout & lt; & lt;, endl; } void InsertSort (int *, int 大小) { cout & lt; & lt;,“插入排序前数组:“,& lt; & lt;, endl; 打印(一个,大小); if (size & lt;=, 1) 返回; for (int 小姐:=,1;,小姐:& lt;,大小;,我+ +) { if ([我],& lt;,[小姐,安康;1]) { int j =,小姐:安康;1; int x =,(我); while (x & lt;, [j]) { [j + 1],=, [j]; j——; } [j + 1],=, x; } } cout<& lt;,“插入排序后数组:“,& lt; & lt;, endl; 打印(一个,大小); } # endif
测试用例:
# define _CRT_SECURE_NO_WARNINGS 1 # include“sort.h” int main () { int arr[],=,{, 4日,5日,0,,,,2,,1,,,,,,,,,,,,3,}; int size =, sizeof (arr),/, sizeof (arr [0]); InsertSort(加勒比海盗,大小); 系统(“暂停”); return 0; }
结果:
感谢大家访问,欢迎批评指正!