算法(第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++ 实现各种排序算法(未完成)的主要内容,如果未能解决你的问题,请参考以下文章

算法(第4版)-2.5 应用

算法(第4版) C++ 插入排序的优化

排序算法实现

排序算法实现(上)

排序算法总结 一

C++ 各种排序算法总结