算法(第4版) C++ 实现各种排序算法(未完成)
Posted Wecccccccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法(第4版) C++ 实现各种排序算法(未完成)相关的知识,希望对你有一定的参考价值。
#include <iostream>
#include <vector>
using namespace std;
class Sort
{
public:
template<typename T>
void Show(vector<T> arr)
{
for (int i = 0; i < arr.size(); i++)
cout << arr[i] << " ";
cout << endl;
}
template<typename T>
bool IsSort(vector<T> arr)
{
for (int i = 1; i < arr.size(); i++)
if (less(arr[i], arr[i - 1])) return false;
return true;
}
template<typename T>
void SelectSort(vector<T> &arr)
{
int len = arr.size();
for (int i = 0; i < len; i++)
{
int min = i;
for (int j = i + 1; j < len; j++)
if (less(arr[j], arr[min]))
min = j;
exch(arr, i, min);
}
}
template<typename T>
void InsertSort(vector<T> &arr)
{
for (int i = 1; i < arr.size(); i++)
{
int tmp = arr[i];
int j;
for (j = i - 1; j >= 0 && less(tmp, arr[j]); j--)
arr[j + 1] = arr[j];
arr[j + 1] = tmp;
}
}
template<typename T>
void ShellSort(vector<T> &arr)
{
int len = arr.size();
int h = 1;
while (h < len / 3) h = 3 * h + 1;
while (h >= 1)
{
for (int i = h; i < len; i++)
for (int j = i; j >= h && less(arr[j], arr[j - h]); j -= h) exch(arr, j, j - h);
h = h / 3;
}
}
private:
template<typename T>
bool less(T a, T b)
{
return a < b;
}
template<typename T>
void exch(vector<T> &arr, int i, int j)
{
T t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
};
int main()
{
Sort s;
vector<int>v;
for (int i = 45; i >= 20; i--)
{
v.push_back(i);
}
s.Show(v);
s.InsertSort(v);
s.Show(v);
v.clear();
for (int i = 45; i >= 20; i--)
{
v.push_back(i);
}
s.SelectSort(v);
s.Show(v);
v.clear();
for (int i = 45; i >= 20; i--)
{
v.push_back(i);
}
s.ShellSort(v);
s.Show(v);
return 0;
}
测试结果:
以上是关于算法(第4版) C++ 实现各种排序算法(未完成)的主要内容,如果未能解决你的问题,请参考以下文章