插入排序
/*
* 直接插入排序
* 原理:
* 将待排序序列第一个元素看做一个有序序列
*
* 从头到尾依次遍历未排序序列
*
* 将遍历到的每个元素插入有序序列的适当位置
*/
#include <stdio.h>
//插入排序
void insertion_sort(int arr[], int len) {
int i, j, k;
for (i = 1; i < len; i++ ) {
k = arr[i];
j = i - 1;
while ((j >= 0) && (arr[j] > k)) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = k;
}
printf("插入排序输出:\n");
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
}
int main()
{
//个数 = 总字节数 / 单个字节数
int len = (int)sizeof(arr) / sizeof(*arr);
int arr2[] = { 45,3,6354,45,34,6,432,5745,3423,3423 };
insertion_sort(arr2, len);
}
时间复杂度
外循环-内循环:O(n^2)
空间复杂度
与选择排序类似,仅需O(1)