算法-插入排序

Posted cyyz-le

tags:

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

插入排序的原理是每插入一个数都要将它和之前的已经完成排序的序列进行重新排序,也就是要找到新插入的数对应原序列中的位置。那么也就是说,每次插入一个数都要对原来排序好的那部分序列进行重新的排序,时间复杂度同样为O(n²)。 这种算法是稳定的排序方法。

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include<malloc.h>
 4 #include <string.h>
 5 
 6 int InsertSort(int *p, int n)
 7 
 8     int i, j,temp=0;
 9     for (i = 1; i < n; i++)
10     
11         temp = p[i];
12         for (j = i-1; j >= 0; j--)
13         
14             if (temp < p[j])//当temp比前面的数小时,把前面的数拿到temp这个位置
15             
16                 p[j+1] = p[j];
17                                //进行下一次比较,j-1
18             else     //如果temp比前面的数大,则跳出循环
19                 break;
20 
21         
22         p[j+1] = temp;  //因为j多循环了一次,所以加上1
23     
24 
25 
26 
28 
29 int dayin(int *q,int len)
30 
31     int i;
32     for (i = 0; i < len; i++)
33     
34         printf("%d ", q[i]);
35     
36 
37 
38 
39 
40 void main()
41 
42     int a[] =  5,2,4,50,5,10,10,3,1,19,11,6,7,8,9 ;
43     int len = sizeof(a) / sizeof(a[0]);
44     InsertSort(a, len);
45     dayin(a, len);
46   
47     printf("\\n%d", len);
48         
49 
50 

函数不理解可以看下我写的解析

技术图片

 

以上是关于算法-插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

《算法》笔记 3 - 选择排序插入排序希尔排序

插入排序算法详解及代码实现

算法漫游指北(第八篇)插入排序算法描述动图演示代码实现过程分析时间复杂度和希尔排序算法描述动图实现代码实现过程分析时间复杂度

算法漫游指北(第八篇)插入排序算法描述动图演示代码实现过程分析时间复杂度和希尔排序算法描述动图实现代码实现过程分析时间复杂度