插入排序法(Insertion Sort)
一,概念
-
自行总结:当前元素小于(大于)前一个元素,则当前元素就插入到前一个元素之前,直到排序完成
-
区别:
- 插入排序:二层循环可以提前结束循环
- 选择排序:二层循环要全部执行
-
时间复杂度:O(n2)
-
特点:如果待排序数组近乎有序,那可以很快结束二层循环,时间复杂度趋于O(n)
二,图示
更接近,插入排序改进方法的逻辑
三,C++实现
main.cpp
#include <iostream>
#include <algorithm>
#include "SortTestHelper.h"
#include "SelectionSort.h"
using namespace std;
template<typename T>
void insertionSort(T arr[], int n){
for( int i = 1 ; i < n ; i ++ ) {
// 寻找元素arr[i]合适的插入位置(和之前元素进行比较)
// 插入排序的二层循环可以提前结束,但选择排序的二层循环要完整执行找到最小值
// 写法1
for( int j = i ; j > 0 ; j-- )
if( arr[j] < arr[j-1] )
swap( arr[j] , arr[j-1] );
else
break;
// 写法2
// for( int j = i ; j > 0 && arr[j] < arr[j-1] ; j -- )
// swap( arr[j] , arr[j-1] );
}
return;
}
int main() {
int n = 10000;
cout<<