4、用函数模板方式设计一个函数模板 sort < T >,采用直接插入排序方式对数据进行排序,并对整数序列和字符序列进行排序。 template < class T > void sort ( T al , int n )
时间: 2024-05-25 19:17:22 浏览: 15
template<typename T>
void sort(T arr[], int n) {
for (int i = 1; i < n; i++) {
T temp = arr[i];
int j;
for (j = i - 1; j >= 0 && arr[j] > temp; j--)
arr[j + 1] = arr[j];
arr[j + 1] = temp;
}
}
int main() {
int arr1[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5 };
char arr2[] = { 'h', 'e', 'l', 'l', 'o' };
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int n2 = sizeof(arr2) / sizeof(arr2[0]);
sort(arr1, n1);
sort(arr2, n2);
for (int i = 0; i < n1; i++)
cout << arr1[i] << " ";
cout << endl;
for (int i = 0; i < n2; i++)
cout << arr2[i] << " ";
cout << endl;
return 0;
}
相关问题
编写一个函数模板InsertionSort实现插入排序功能,编写main函数输入5个整数,调用函数模板对生成的整数排序后输出。
好的,以下是实现插入排序的函数模板InsertionSort以及main函数的代码:
```c++
#include <iostream>
using namespace std;
template<class T>
void InsertionSort(T arr[], int n) {
for (int i = 1; i < n; i++) {
T key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
int main() {
int arr[5];
cout << "请输入5个整数:" << endl;
for (int i = 0; i < 5; i++) {
cin >> arr[i];
}
InsertionSort(arr, 5);
cout << "排序后的结果为:" << endl;
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
在这段代码中,我们首先定义了InsertionSort函数模板,用于实现插入排序。然后在main函数中,我们先输入5个整数,并将这些整数存储在一个数组中。接着调用InsertionSort函数模板对这个数组进行排序,并输出排好序的结果。
编写一个函数模板sort,使用sort对上一个的Link按关键字排序。
假设上一个Link的节点类型为Node,其中包含一个关键字key,那么可以按照以下方式编写sort函数模板:
```cpp
template<typename T>
void sort(Link<T>& list, bool ascending = true) {
vector<T> vec;
Node<T>* current = list.head;
while (current != nullptr) {
vec.push_back(current->data);
current = current->next;
}
std::sort(vec.begin(), vec.end(), [=](const T& a, const T& b) {
return ascending ? a.key < b.key : a.key > b.key;
});
list.clear();
for (const T& item : vec) {
list.append(item);
}
}
```
这里使用了一个vector来暂存链表中的节点数据,然后使用std::sort函数对vector进行排序。最后再将排序后的数据重新构造成一个链表。其中,ascending参数表示是否按照升序排序,如果不传入该参数,默认按照升序排序。