插入排序:
插入排序(Insertion Sort)是一种简单直观的排序算法。其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中(类似于排序扑克牌一样),直到所有的纪录插入完为止,得到一个新的有序序列。插入排序对于少量元素的排序是一个有效的算法。
算法描述:
一般来说,插入排序都采用in-place实现。
⒈ 从第一个元素开始a[1],该元素认为已经被排序;
⒉ 取出下一个元素a[i],在已经排序的元素序列(a[0]—a[i-1])中从后向前扫描;
⒊ 如果该元素(已排序)大于(或小于)新元素(key),将该元素移到下一位置;
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
⒌ 将新元素插入到下一位置中;
⒍ 重复步骤2~5;
算法复杂度:
时间复杂度:O(n^2);
空间复杂度:O(1);
算法演示(C++):
// 插入排序按照从小到大的顺序排序 void InsertionSort(int a[], int len) { for (int i = 0; i < len; i++) { int key = a[i]; int j = i - 1; while (j >= 0 && a[j] > key) // 如果从大到小则修改为 a[j]<key { a[j + 1] = a[j]; --j; } a[j + 1] = key; } }