直接插入排序思想:
扑克牌,左边一部分是已经排好序的,新牌往左依次比较,找到位置放下。
时间复杂度:O(n2)
//insertion_sort.c
#include<stdio.h>
void insertion_sort(int a[], int len) {//len数组长度
int i = 0;//i是下标
for (i = 1; i < len; ++i) {
int key = a[i];//key保存本次要插入的元素
while (a[i - 1] > key) {
a[i] = a[i - 1];
--i;
if (i == 0) {//当i为1时,经过--i,i变为0,此时a[i-1]即为a[-1],数组下标访问越界。
break;
}
}
a[i] = key;
}
}
int main() {
int arr[] = { 9,6,8,2,7,9,3,5,4,8,1,6,8,4,5,1 };
int len = 16;//数组长度
insertion_sort(arr, len);
int i;
for (i = 0; i < len; ++i) {
printf("%d ", arr[i]);
}
return 0;
}
本文代码运行环境为Visual Studio Community 2019 16.5.0版本。
代码内容主要来自UP主“正月点灯笼”的教程https://www.bilibili.com/video/av9830014
如有疑问或建议,欢迎留言讨论。