C++_函数模板+希尔排序
#include <iostream>
#include <time.h>
using namespace std;
template<class T>
void PrintArray(T*arr,int length) {
for (int i = 0; i < length; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
template<class T>
void SortArray(T*arr,int length) {
int len = length;
int i = 0;
int j = 0;
int k = 0;
do
{
len = len / 3 + 1;//注意点1
for (i = 0; i <len; ++i)
{
for (j = i+len; j < length; j+= len)//注意点2:+=偏移量
{
if (arr[j]<arr[j-len])
{
T temp = arr[j];
for (k = j- len; k>=0&&temp<arr[k]; k-=len)//注意点3:要>=0
{
arr[k + len] = arr[k];
}
arr[k + len] = temp;
}
}
}
} while (len>1);
}
void test() {
//int排序
int arr[10];
for (int i = 0; i < 10; i++)
{
arr[i] = rand() % 100;
}
int len = sizeof(arr) / sizeof(int);
cout << "排序前:";
PrintArray(arr, len);
SortArray(arr, len);
cout << "排序后:";
PrintArray(arr, len);
//char排序
char charArr[] = { 'b','a','f','c','z','q','y','g','j','l','s' };
len = sizeof(charArr) / sizeof(char);
cout << "排序前:";
PrintArray(charArr, len);
SortArray(charArr, len);
cout << "排序后:";
PrintArray(charArr, len);
}
int main() {
srand((unsigned int)time(NULL));
test();
return 0;
}
效果图: