真是学着忘着,学着忘着…
学的东西已经快要忘光了,说到底,还是自己没有深刻的理解并掌握。
提醒自己:再简单的知识你不会就是不会,永远不要对学过的小知识或者简单的知识不屑一顾,可能下次你跳进的坑就是这些小的知识点为你而挖的。
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
template<typename T>
class Greate
{
public :
bool operator()(const T& left, const T& right)//仿函数
{
return left > right;
}
};
template<typename T>
class Less
{
public :
bool operator()(const T& left, const T& right)//仿函数
{
return left < right;
}
};
template<typename T, class Compare>
void BubbleSort(T* array, size_t sz)
{
for (size_t i = 0; i < sz - 1; i++)
{
bool isChange = true;//在每次从头开始排序时都需要初始化标志位
for (size_t j = 0; j < sz - i - 1; j++)
{
if (Compare()(array[j], array[j + 1]))//调用仿函数、类似于无名对象
{
isChange = false;
T tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
if (isChange)//在排序过程中,如果发现有一趟没有进行交换,那么说明已经有序了
{
break;
}
}
}
template<typename T>
void Show(T* array, size_t sz)
{
for (size_t index = 0; index < sz; index++)
{
cout << array[index]<<" ";
}
cout << endl;
}
void Test1()
{
double array[] = { 0.1, 3.3, 9.1, 2.2, 4.7, 6.0 };
int array1[] = { 1, 3, 9, 2, 4, 6 };
BubbleSort<int, Greate<int> >(array1, sizeof (array1) / sizeof(array1[0]));
Show(array1, sizeof (array1) / sizeof(array1[0]));
BubbleSort<double, Less<double> >(array, sizeof (array) / sizeof(array[0]));
Show(array, sizeof (array) / sizeof(array[0]));
}
int main()
{
Test1();
return 0;
}