插入排序思想:(跟一张一张抓扑克牌,然后从左往右,从大到小将这张牌插入合适的一样的思想)将当前元素与之前已经拍好序的元素挨个进行比较,如果不符合条件,则将当前位置的元素与之前对比的那个元素交换位置,然后依次与前面的元素比较,直到当前元素找到合适的位置为止。
C++代码如下;
void insertSort(int a[], int n) {
for (int i = 1; i < n; i++)
{
int temp = a[i];
int j;
for (j = i; j > 0 && a[j-1] > temp; j--)
a[j] = a[j-1];
a[j] = temp;
}
这个插入排序是进行过优化的,也就是说先将当前元素(假如在元素列表中是第四个元素)备份(传给变量temp),然后再与该元素之前的一个元素(第三个元素)进行比较,如果发现不符合条件,就把被比较的元素后移(将第三个元素的值赋值给第四个),但不急着将当备份的元素赋值给之前被比较元素的位置(第三个),而是用这个备份元素再与之前的元素(第二个)比较。。。直到找到合适的位置(比如是第二个位置是合适的位置)就把temp的值赋给它。这样的优化原理是,减少元素的赋值次数。
另外,如果在一些近乎有序的数组当中,使用插入排序的效率很高,最优的情况能使算法达到O(n)级别,也就是当所有元素已经是有序数组时。