插入排序
插入排序可理解为推箱子问题,前面有4个箱子,且都从小到大排好序,现在第5个箱子来了
需要将第5个箱子推到指定位置。
思路:先把第五个箱子放到旁边,现在有5个位置,比较第4个和第5个,若第4个大,则将其
推到位置5,再比较第3个与第5个,若第3个大,则将其推到位置4,假设第2个箱子比第5个小
则将第5个箱子推到位置2,结束。
代码也很简单:
1 void insertSort(vector<int> &a){ 2 int j,temp; 3 for(int i=1;i<a.size();++i){ //从第二个元素开始 4 temp=a[i]; 5 j=i; 6 while(j>=1&&temp<a[j-1]){ 7 a[j]=a[j-1]; 8 --j; 9 } 10 a[j]=temp; 11 } 12 }
时间复杂度:
最差:O(n²)
平均:O(n²)
空间复杂度:
O(1)