希尔排序是插入排序的升级,不在是以一作为间隔进行排序,而是以一个量来进行排序的,
这个量会随着循环逐渐的减小
#include <iostream>
#include <vector>
#include <ctime>
#include <algorithm>
using namespace std;
void ShellSort(vector<int>& T_vec)
{
int Increment = T_vec.size();
do
{
int j;
Increment = Increment / 2;
for (int i = Increment; i < T_vec.size(); ++i)
{
if (T_vec[i - Increment] > T_vec[i])
{
int Temp_val = T_vec[i];
for (j = i - Increment; j >= 0 && T_vec[j] > Temp_val; j -= Increment)
{
T_vec[j + Increment] = T_vec[j];
}
T_vec[j + Increment] = Temp_val;
}
}
} while (Increment > 1);
}
class Print
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void Text()
{
vector<int> T_vec;
srand((unsigned)time(nullptr));
cout << "输入需要排序的个数: " << "\n";
int Num;
cin >> Num;
while (Num > 0)
{
T_vec.emplace_back(rand() % 10);
--Num;
}
cout << "排序前";
for_each(T_vec.begin(), T_vec.end(), Print());
cout << endl;
cout << "排序后";
ShellSort(T_vec);
for_each(T_vec.begin(), T_vec.end(), Print());
cout << "\n";
}
int main()
{
Text();
system("pause");
return 0;
}