Day8C语言前期阶段练习算法之插入排序
插入排序的通俗理解
想象你在打扑克牌时整理手牌的过程:
左手是已排序的牌,右手拿新牌
从第二张牌开始(第一张牌默认已排序)
拿起一张新牌,与左手已排序的牌从右往左比较
找到合适的位置插入新牌
重复这个过程直到所有牌都排序完成
#include <stdio.h>// 插入排序函数
void insertionSort(int arr[], int n)
{int i, j, key;// 从第二个元素开始遍历for (i = 1; i < n; i++) {// 保存当前要插入的元素key = arr[i];// j指向当前元素的前一个位置j = i - 1;// 将比key大的元素都向后移动一位// 为key腾出插入位置while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j]; // 元素后移j = j - 1; // 继续向前比较}// 将key插入到正确位置arr[j + 1] = key;// 打印每轮排序后的数组状态printf("第%d轮排序后: ", i);for (int k = 0; k < n; k++) {printf("%d ", arr[k]);}printf("\n");}
}// 打印数组函数
void printArray(int arr[], int n){for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");
}int main()
{int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);printf("排序前的数组: ");printArray(arr, n);printf("\n");// 调用插入排序insertionSort(arr, n);printf("\n排序后的数组: ");printArray(arr, n);return 0;
}