思路:将数组分为两个部分:前一部分为有序,后一部分为无序。将无序数组元素向有序数组中进行插入
设 j 为有序数组的最后一个元素;i为无序数组的最后一个元素。
稳定 时间复杂度 最好 o(n) 最坏 o(n^2) 平均 o(n^2)
使用场景:数组中的元素离最终位置不远的情况,而且数量尽量在 5-20之间比较合适。
#include<iostream>
usingnamespace std;
void InsertSort(int*arr,int len)
{
if(arr == NULL||len <=0)
reutrn ;
int i,j,temp;
for(i=1;i<len;i++)
{
temp = arr[i];
j = i-1;
while(arr[j] > arr[j+1] & j>=0)
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
int main()
{
int arr[] ={3,2,7,8,4,9,1,0,5,6};
int len = sizeof(arr)/sizeof(arr[0]);
InsertSort(arr,len);
return 0;
}