插入排序
/** * 插入排序 * @tparam T * @param arr 待排序的数组 * @param n 数组大小 */
template<typename T>
void insertionSort(T arr[], int n) {
//i从1开始 默认arr[0]已经有序
for (int i = 1; i < n; i++) {
//j从后向前遍历 寻找比当前大的元素
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1])
swap(arr[j], arr[j - 1]);
else
break;
}
}
}
改进的插入排序
/** * 改进插入排序 * @tparam T * @param arr 待排序的数组 * @param n 数组大小 */
template<typename T>
void insertionSort(T arr[], int n) {
//i从1开始 默认arr[0]已经有序
for (int i = 1; i < n; i++) {
//j从后向前遍历 寻找比当前大的元素
T e = arr[i];
int j;//j保存元素e应该插入的位置
for (j = i; j > 0 && arr[j - 1] > e; j--) {
arr[j] = arr[j - 1];
}
arr[j] = e;
}
}