面试题答案
一键面试- 定义命名空间:
- 首先定义两个命名空间,分别用于冒泡排序版本和快速排序版本。
namespace bubble_sort_version { // 这里放置冒泡排序相关代码 } namespace quick_sort_version { // 这里放置快速排序相关代码 }
- 函数模板重载:
- 冒泡排序函数模板:
- 在
bubble_sort_version
命名空间内定义使用冒泡排序的函数模板。
namespace bubble_sort_version { template <typename T, size_t N> void sort(T(&arr)[N]) { for (size_t i = 0; i < N - 1; ++i) { for (size_t j = 0; j < N - i - 1; ++j) { if (arr[j] > arr[j + 1]) { T temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } }
- 在
- 快速排序函数模板:
- 在
quick_sort_version
命名空间内定义使用快速排序的函数模板。
namespace quick_sort_version { template <typename T, size_t N> void quickSort(T arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } template <typename T, size_t N> int partition(T arr[], int low, int high) { T pivot = arr[high]; int i = (low - 1); for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } T temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } template <typename T, size_t N> void sort(T(&arr)[N]) { quickSort(arr, 0, N - 1); } }
- 在
- 冒泡排序函数模板:
- 使用:
- 在需要使用排序的地方,通过命名空间来选择特定版本的排序函数模板。
int main() { int arr[5] = {3, 6, 8, 10, 1}; bubble_sort_version::sort(arr); // 此时arr数组使用冒泡排序进行了排序 int arr2[5] = {3, 6, 8, 10, 1}; quick_sort_version::sort(arr2); // 此时arr2数组使用快速排序进行了排序 return 0; }
这样通过函数模板重载(不同命名空间内的同名函数模板)和命名空间,在不破坏现有代码的情况下实现了两个不同版本的排序函数模板。