一、插入排序的原理
- 把第一个元素和第二个元素比较,若第一个大于第二个,则交换两个元素的位置。
- 把第三个元素插入到已排好序的前两个元素中的合适位置。
- 将第四个元素插入到已排好序的前三个元素中的合适位置。
- 以此类推,直到所有的元素都插入到合适的位置。
二、代码实现
void insertion_sort(int arr[], int len)
{
int temp;//用来存放临时的变量
for (int i = 1; i < len; i++) //从第二个元素开始,因为第一个元素可以认为已经排好序了
{
temp = arr[i]; // 取出当前需要插入的元素
for (int j = i - 1; j >= 0 && arr[j] > temp; j--) // 依次后移,查找插入位置
{
arr[j + 1] = arr[j]; // 将当前元素后移一位
}
arr[j + 1] = temp;// 插入到合适的位置
}
}
三、实现从小到大排序
输入10个数字并将其从小到大排
#include <stdio.h>
void insertion_sort(int arr[], int len)
{
int i, j, temp;
for (i = 1; i < len; i++)
{
temp = arr[i];
for (j = i - 1; j >= 0 && arr[j] > temp; j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[10];
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
insertion_sort(arr, 10);
return 0;
}
结果
四、插入排序的优缺点
优点:
如果是进行相对有序的数组,效率会非常高。不占额外空间,是一种稳定的算法。
缺点:
时间复杂度高,遇到数据过多的情况下不是很适用。