插入排序

本文详细介绍了插入排序算法的工作原理及其实现过程。适用于数据量较小的情况,例如数据量级小于千时,插入排序是一个不错的选择。文章还提供了C语言实现的例子,并分析了其时间复杂度和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

插入排序不适合对于数据量比较大的排序应用。如果数据量很小,比如量级小于千,插入排序还是一个不错的选择。

 1 /*
 2 
 3 1.从第一个元素开始,该元素可以认为已经被排序
 4 
 5 2.取出下一个元素,在已经排序的元素序列中从后向前扫描
 6 
 7 3.如果该元素(已排序)大于新元素,将该元素移到下一位置
 8 
 9 4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
10 
11 5.将新元素插入到该位置后
12 
13 6.重复步骤2~5
14 
15 */
16 #include <stdio.h>
17 
18 
19 // 分类 -------------- 内部比较排序
20 
21 // 数据结构 ---------- 数组
22 
23 // 最差时间复杂度 ---- 最坏情况为输入序列是降序排列的,此时时间复杂度O(n^2)
24 
25 // 最优时间复杂度 ---- 最好情况为输入序列是升序排列的,此时时间复杂度O(n)
26 
27 // 平均时间复杂度 ---- O(n^2)
28 
29 // 所需辅助空间 ------ O(1)
30 
31 // 稳定性 ------------ 稳定
32 
33 
34 
35 void InsertSort( int A[], int n )
36 {
37     int i, j, get;
38     for( i = 0; i < n; i++ )    // 类似抓扑克牌排序
39     {
40         get = A[i+1];           // 右手抓到一张扑克牌
41         j = i;                  // 拿在左手上的牌总是排序好的
42         while( j >= 0 && A[j] > get )     // 将抓到的牌与手牌从右向左进行比较
43         {
44             A[j+1] = A[j];       // 如果该手牌比抓到的牌大,就将其右移
45             j--;
46         }
47         A[j+1] = get;           // 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的)
48     }
49 }
50 
51 int main()
52 {
53     int A[] = { 8, 5, 2, 6, 9, 3, 1, 4, 0, 7 }; // 从小到大插入排序
54     int n = sizeof(A) / sizeof(int);
55     
56     InsertSort( A, n );
57     
58     int i;
59     printf("插入排序结果:");
60     for( i = 0; i < n; i++ )
61     {
62         printf("%d ", A[i]);
63     }
64     printf("\n");
65     
66     return 0;
67 }

 

转载于:https://www.cnblogs.com/itsad/p/7865841.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值