直接插入排序又称简单插入排序,它是基本的排序算法之一。
举例分析排序思想
有如下六个数字:4,9,6,5,8,7。用直接插入排序算法对其进行排序,以递增顺序为例。
1.在序列中取出9与4进行比较,4<9,因此9插在4后边
2.在序列中取出6与9进行比较,6<9,因此6插在9的前边,9往后移动;比较4和6,6>4,位置不变。
3.在序列中取出5与9进行比较,5<9,因此5插在9的前边,9往后移动;将取出的5与6进行比较,5<6,因此5插在6的前边,6往后移;5和4进行比较,5>4位置不变。
4.在序列中取出8与9进行比较,8<9因此8插在9的前边,9往后移动;将取出的8与6进行比较,8>6,因此位置不变;由于之间对6进行排序时,6之前的数字都小于6,因此不再对8进行任何比较。
.
5.在序列中取出7与9进行比较,7<9因此8插在9的前边,9往后移动;将取出的7与8进行比较,7<8,因此7插在8前边,8往后移动;将取出的7与6进行比较,7>6,因此位置不变;由于之间对6进行排序时,6之前的数字都小于6,因此不再对8进行任何比较。
由以上1.2.3.4.5步骤可得到已知序列的递增序列:4,5,6,7,8,9。
代码实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void InsertSort(int *arr, int len)
{
int i;
int j;
int tmp;
for (i = 1; i<len; i++)
{
tmp = arr[i];
for (j = i - 1; j >= 0; j--)
{
if (arr[j] <= tmp)
{
break;
}
arr[j + 1] = arr[j];
}
arr[j + 1] = tmp;
}
}
int main()
{
int arr[] = { 4, 9, 6, 5, 8, 7 };
InsertSort(arr, sizeof(arr) / sizeof(arr[0]));
}
时间复杂度和空间复杂度
插入排序的时间复杂度为,空间复杂度为
。
简单小结
插入排序的基本步骤:1)找位置 2)移数据 3)插入
插入排序是一种常见的基本的排序算法,而且序列越有序越快。在序列完全有序的情况下时间复杂度可达到