C++实现插入排序
用到的工具函数
计算数组的长度
template<class T>
int length(T &arr) {
return sizeof(arr) / sizeof(arr[0]);
}
交换两个变量的值
template<class T>
void swap(T *a, T *b) {
T tmp = *b;
*b = *a;
*a = tmp;
}
插入排序函数
定义插入排序函数
/*
* *arr:待排序的数组
* length:数组的长度
* order:是否按从小到大排序, 默认为true
*/
void insertionSort(int *arr, int length, bool order = true);
实现插入排序函数
void insertionSort(int *arr, int length, bool order) {
for (int i = 1; i < length; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
//降序排列
if (!order) {
for (int i = 0; i < length / 2; i++) {
swap(&arr[i], &arr[length - i - 1]);
}
}
}
测试函数
void testInsertionSort() {
int a[] = {-1, 23, -5, -3, -6, 66};
insertionSort(a, length(a));
for (int i : a) {
std::cout << i << " ";
}
std::cout << std::endl;
insertionSort(a, length(a), false);
for (int i : a) {
std::cout << i << " ";
}
}
测试结果
-6 -5 -3 -1 23 66
66 23 -1 -3 -5 -6