对数器的使用(用来生成随机数组来判断排序算法是否正确)
对数器生成一个随机数组来排序,从而验证。
下面用C++写一个简单的对数器来完成冒泡排序。
代码:
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
using namespace std;
//用模板整型和浮点型都可以使用
template<typename T>
void BubbleSort(T array[],int len)
{
if (len < 2)
{
return;
}
int i, j;
//j从数组末尾开始,i一直遍历到j,相邻比较,如果当前大于后一个元素就交换
//遍历一遍后j--,说明最大数已经到了数组末尾,下一次选出次大数放在倒数第二个位置,所以j--
for (j = len - 1; j >= 0; j--)
for (i = 0; i < j; i++)
{
if (array[i] > array[i + 1])
{
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
template<typename TT>
void random_array(TT arr1,TT arr2)
{
//设置成静态变量可以防止每次调用生成一样的随机数
//生成-100到100的均匀分布随机数,e为随机引擎
static uniform_int_distribution<int> u(-100, 100);static default_random_engine e;
//生成两个一样的随机数组,长度为100
for (int i = 0; i < 100; i++)
{
arr1[i] = u(e);
arr2[i] = arr1[i];
}
//一个用sort函数进行排序,一个用我们写的排序方法进行排序。如果完全一样,那么result的值一直不变,为1,打印Nice!
sort(arr1,arr1+100);
BubbleSort(arr2,100);
bool result = 1;
for (int i = 0; i < 100; i++)
{
if (arr1[i] != arr2[i])
{
result = 0;
break;
}
}
if (result == 1)
{
cout << "Nice!" << endl;
}
}
int main()
{
int arr1[100], arr2[100];
for (int i = 0; i < 10; i++)
{
random_array(arr1, arr2);
cout << arr1[0] << endl; //看一下每一次生成的元素是否一样
}
return 0;
}