原理
实现
0.用for循环遍历每个数
1.记录有序序列最后一个元素下标,和待插入的数
2.用while完成单趟排序并插入
void InsertSort(int n,int *arr){
for(int i=0;i<n-1;i++){
int end =i;
int tmp = arr[end+1];
while(end>=0){
if(tmp < arr[end]){
arr[end+1]=arr[end];
end--;
}else break;
}
arr[end+1]=tmp;
}
}
时间复杂度:最坏情况下为O(N*N),此时待排序列为逆序,或者说接近逆序
最好情况下为O(N),此时待排序列为升序,或者说接近升序。
空间复杂度:O(1)