插入排序的算法设计与分析
问题描述:设计并分析插入排序算法
【算法设计思想】
- 开始排序:假定第一个元素已经排序(实际上,单个元素可以视为已排序状态),因此排序开始于数组的第二个元素。
- 选择未排序的元素:从未排序的部分取出第一个元素,我们称之为
key
。这个key
是待插入到已排序序列中的元素。
- 比较和插入:
- 将
key
与已排序部分的元素从后向前逐一比较。
- 如果当前比较的已排序元素大于
key
,则将该元素向后移动一个位置,为key
的插入腾出空间。
- 重复这个过程,直到找到一个已排序的元素小于或等于
key
的位置,或者已排序部分比较完毕。
- 插入元素:在找到的适当位置插入
key
。此时,key
成为已排序部分的一员。
- 重复过程:对数组中的每个未排序元素重复上述过程,直到整个数组排序完成。
【算法描述】
void insertionSort(int array[], int size) {
int i, key, j;
for (i = 1; i < size; i++) {
key = array[i];
j = i - 1;
while (j >= 0 && array[j] > key) {
array[j + 1] = array[j];
j = j - 1;
}
array[j + 1] = key;
}
}
【完整的测试程序】
#include <stdio.h>
void insertionSort(int array[], int size) {
int i, key, j;
for (i = 1; i < size; i++) {
key = array[i];
j = i - 1;
while (j >= 0 && array[j] > key) {
array[j + 1] = array[j];
j = j - 1;
}
array[j + 1] = key;
}
}
void printArray(int array[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
int main() {
int array[] = {12, 11, 13, 5, 6};
int size = sizeof(array) / sizeof(array[0]);
printf("Original array: \n");
printArray(array, size);
insertionSort(array, size);
printf("Sorted array: \n");
printArray(array, size);
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战