插入排序
/**
* 插入排序
* @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;
}
}