C语言 插入排序

本文介绍了插入排序的基本概念和两种实现方式,并提供了C语言的代码实现,详细解释了算法的过程,适合理解与学习排序算法。

插入排序简介

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。

插入排序的模拟过程可以看链接:InsertSortion

实现过程

为了比较容易地理解插入排序,我们可以列出一组数据,比如:
1,5,4,3,7

我列出了两种方法分别说明插入排序的实现过程,你可以选择自己喜欢的方法:

第一种

对于插入排序算法来说:
1. 取出一个数:
1
2. 取出第二个数 5,与 1比较,比 1小,插入第二位:
1, 5
3. 取出第三个数 4,依次与 1,5比较,所以4插入到第二位中,而 5向后推:
1, 4, 5
4. 取出第四个数 3,依次与 1, 4,5比较,所以3插入到第二位中,而 4, 5向后推:
1, 3, 4, 5
5 重复以上逻辑:
1, 3, 4, 5, 7

第二种

这里写图片描述

分析以上过程,我们发现排序算法可以分成两个步骤:
1. 遍历数据表,每次取出一个数据,与之前的数据比较。
2. 如果比之前的数据小,插入后将数据都向后推。

代码实现

下面是插入排序的实现,之后是对代码实现的简略说明:

#include <stdio.h>

void print(const int *a, const 
### C语言实现插入排序 #### 插入排序简介 插入排序是一种简单直观的排序算法。它的工作原理类似于人们整理手中的扑克牌,每次从未排序区域取出一张牌,并将其插入到已排序区域内合适的位置上[^5]。 #### 完整代码示例 下面是一个完整的C语言程序来展示如何使用插入排序对一组数据进行升序排列: ```c #include <stdio.h> // 打印当前数组状态 void printArray(int array[], int size) { for (int i = 0; i < size; ++i) { printf("%d ", array[i]); } printf("\n"); } // 插入排序函数定义 void insertionSort(int array[], int length) { int key; int j; // 遍历数组中的每一个元素 for (int i = 1; i < length; ++i) { key = array[i]; j = i - 1; // 将key放置于正确位置之前移动较大的元素 while (j >= 0 && array[j] > key) { array[j + 1] = array[j]; --j; } // 放置key至适当位置 array[j + 1] = key; // 输出每轮处理后的中间结果(可选) printArray(array, length); } } // 主函数测试插入排序功能 int main() { int numbers[] = {49, 38, 65, 97, 76, 13, 27, 49}; int numSize = sizeof(numbers)/sizeof(numbers[0]); printf("原始数组:\n"); printArray(numbers, numSize); insertionSort(numbers, numSize); printf("排序后数组:\n"); printArray(numbers, numSize); return 0; } ``` 此段代码展示了`insertionSort()`方的具体实现方式以及辅助性的打印函数用于观察排序过程的变化情况。通过这个例子可以清楚看到插入排序是如何工作的[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值