制作类似网站软件,开发的某网站建设公司网站源码,黄冈个人网站建设平台,做网站卖游戏装备插入排序算法是所有排序方法中最简单的一种算法#xff0c;其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中#xff0c;最终得到的序列就是已经排序好的数据。直接插入排序是插入排序算法中的一种#xff0c;采用的方法是#xff1a;在添加新的记录时其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中最终得到的序列就是已经排序好的数据。直接插入排序是插入排序算法中的一种采用的方法是在添加新的记录时使用顺序查找的方式找到其要插入的位置然后将新记录插入。很多初学者所说的插入排序实际上指的就是直接插入排序算法插入排序算法还包括2-路插入排序表插入排序和例如采用直接插入排序算法将无序表{3,1,7,5,2,4,9,6}进行升序排序的过程为首先考虑记录 3 由于插入排序刚开始有序表中没有任何记录所以 3 可以直接添加到有序表中则有序表和无序表可以如图 1 所示图 1 直接插入排序(1)向有序表中插入记录 1 时同有序表中记录 3 进行比较13所以插入到记录 3 的左侧如图 2 所示图 2 直接插入排序(2)向有序表插入记录 7 时同有序表中记录 3 进行比较37所以插入到记录 3 的右侧如图 3 所示图 3 直接插入排序(3)向有序表中插入记录 5 时同有序表中记录 7 进行比较57同时 53所以插入到 3 和 7 中间如图 4 所示图 4 直接插入排序(4)向有序表插入记录 2 时同有序表中记录 7进行比较27再同 531分别进行比较最终确定 2 位于 1 和 3 中间如图 5 所示图 5 直接插入排序(5)照此规律依次将无序表中的记录 49 和 6插入到有序表中如图 6 所示图 6 依次插入记录49和6直接插入排序的具体代码实现为#include //自定义的输出函数void print(int a[], int n ,int i){printf(%d:,i);for(int j0; j8; j){printf(%d,a[j]);}printf(\n);}//直接插入排序函数void InsertSort(int a[], int n){for(int i 1; iif(a[i] a[i-1]){//若第 i 个元素大于 i-1 元素则直接插入反之需要找到适当的插入位置后在插入。int j i-1;int x a[i];while(j-1 x a[j]){ //采用顺序查找方式找到插入的位置在查找的同时将数组中的元素进行后移操作给插入元素腾出空间a[j1] a[j];j--;}a[j1] x; //插入到正确位置}print(a,n,i);//打印每次排序后的结果}}int main(){int a[8] {3,1,7,5,2,4,9,6};InsertSort(a,8);return 0;}运行结果为1:137524962:137524963:135724964:123574965:123457966:123457967:12345679直接插入排序算法本身比较简洁容易实现该算法的时间复杂度为O(n2)。插入排序的其它 4 种排序方法在后序章节中有详细介绍。