#include<iostream>
#include<math.h>
#include<algorithm>
#include<vector>
#include<time.h>
#include<malloc.h>
using namespace std;
//void swap(int *arr, int i, int j)
//{
// int tmp = arr[i];
// arr[i] = arr[j];
// arr[j] = tmp;
//}
void swap(int *arr, int i, int j){
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
//1.要测的冒泡排序方法a
void bubbleSort(int *arr){
if(arr == NULL || _msize(arr)/sizeof(arr) < 2)
return;
for(int end = _msize(arr)/sizeof(arr) - 1; end > 0; end --){
for(int i = 0; i < end; i ++){
if(arr[i] > arr[i + 1]){
swap(arr, i, i + 1);
}
}
}
//cout<<"原数组排序后的结果为:"<<endl;
//for(int i = 0; i < _msize(arr)/sizeof(arr); i ++)
// cout<<arr[i]<<" ";
//cout<<endl;
}
//for test
//2.实现一个绝对正确即使复杂度不好的方法b
void comparator(int *arr){
vector<int> temp;
for(int i = 0; i < _msize(arr)/sizeof(arr); i ++)
temp.push_back(arr[i]);
sort(temp.begin(),temp.end());
for(int i = 0; i < temp.size(); i ++)
arr[i] = temp[i];
//cout<<"复制后的数组排序为:"<<endl;
//for(int i = 0; i < _msize(arr)/sizeof(arr); i ++)
// cout<<arr[i]<<" ";
//cout<<endl;
}
//for test
//3.实现一个随机样本产生器:生成容量随机和元素大小随机的数组
int *generateRandomArray(int maxSize, int maxValue){
srand((unsigned)time(NULL));
int length = (int)(rand()%maxSize+1);
int *arr = new int[length];
//cout<<"随机生成的数组(大小为:"<<length<<")是:"<<endl;
for(int i = 0; i < length; i ++){
arr[i] = (int)(rand()%maxValue);
//cout<<arr[i]<<" ";
}
//cout<<endl;
return arr;
}
//for test
int *copyArray(int *arr){
if(arr == NULL)
return NULL;
int *res = new int[_msize(arr)/sizeof(int)];
for(int i = 0;i < _msize(arr)/sizeof(int); i ++)
res[i] = arr[i];
//cout<<"复制后的数组:"<<endl;
//for(int i = 0;i < _msize(res)/sizeof(int); i ++)
// cout<<res[i]<<" ";
//cout<<endl;
return res;
}
//for test
//4.实现比对的方法:判断两个数组是否相等
bool isEqual(int *arr1, int *arr2){
if((arr1 == NULL && arr2 != NULL) || (arr1 != NULL && arr1 == NULL))
return false;
if(arr1 == NULL && arr2 == NULL)
return true;
if((_msize(arr1)/sizeof(int)) != (_msize(arr2)/sizeof(int)))
return false;
for(int i = 0; i < _msize(arr1)/sizeof(int); i ++){
if(arr1[i] != arr2[i])
return false;
}
return true;
}
//for test
void printArray(int *arr){
if(arr == NULL)
return;
for(int i = 0; i < _msize(arr)/sizeof(int); i ++)
cout<<arr[i]<< " ";
cout<<endl;
}
//5.把方法a和方法b比对很多次来验证方法a是否正确
//6.如果有一个样本使得比对出错,打印样本分析是哪个方法出错
//7.当样本数量很多时比对测试依然正确,可以确定方法a已经正确
int main()
{
int testTime = 500000;
int maxSize = 100;
int maxValue = 100;
bool succeed = true;
for(int i = 0; i < testTime; i ++){
int *arr1 = generateRandomArray(maxSize, maxValue);
int *arr2 = copyArray(arr1);
bubbleSort(arr1);
comparator(arr2);
if(!isEqual(arr1, arr2)){
succeed = false;
break;
}
}
cout<<(succeed ? "Nice!" : "Fucking Fucked!")<<endl;
int *arr = generateRandomArray(maxSize, maxValue);
printArray(arr);//排序前打印出来
bubbleSort(arr);
printArray(arr);//排序后打印出来
return 0;
}
冒泡排序的对数器使用——C++版本
最新推荐文章于 2022-04-17 21:51:19 发布