思路:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,插入后,有序表继续有序。

    初始化:取待排序中的第一个元素为为有序表,除了第一个元素的所有元素组成无序表。

    直接插入排序是由两层嵌套循环组成。外层循环标识并决定待插入到有序数列的元素。内存循环为待插数值确定其合适位置,是插入后有序序列仍为有序序列。

    外层循环从第2个数值开始。

    内层循环中,待插入数值和它左面第1个数值比较,若左面第1个数值比它大,则左面第1个数值放到其后面的位置中(即带插入数值的位置,所以用temp保存一下待插值),然后和左面第2个比较,否则将待插入值放到它左面第1个数值的右面。依次类推。

 

#include 
#include
void swap(int arr[] ,int i, int j){int temp;temp = arr[i];arr[i] = arr[j];arr[j] = temp;}void InsertSort(int arr[], int n){int i;for(i=1;i
=0 && arr[j]>temp){arr[j+1] = arr[j];j--;}arr[j+1] = temp;}}void print(int arr[], int n){int i;for(i=0; i

复杂度:O(n2)

稳定排序