C++:分拣的测试速度 - 得到 0.00
C++: Test Speeds of Sorting - Got 0.00's
我想测试三种算法的速度,这是我的完整代码:
#include<iostream>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <algorithm>
#include <time.h>
void bubbleSort(int arr[])
{
int length = sizeof(arr)/sizeof(arr[0]);
int i, j;
for(i=(length-1); i >= 0; i--)
{
for(j =1; j<=i; j++)
{
if (arr[j-1]>arr[j])
{
int temp = arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
}
}
}
void selectionSort(int arr1[])
{
int length = sizeof(arr1)/sizeof(arr1[0]);
int i;
int j;
for(i= 0; i<length-1; i++)
{
int min = j;
for(j = i+1;j<length;j++)
{
if (arr1[j]<arr1[min])
{
min = j;
}
}
int temp =arr1[i];
arr1[i]=arr1[min];
arr1[min]= temp;
}
}
void insertionSort(int arr2[])
{
int length = sizeof(arr2)/sizeof(arr2[0]);
for(int i=1;i<length; i++)
{
int index = arr2[i];
int j =i;
while(j>0&&arr2[j-1]>index)
{
arr2[j]= arr2[j-1];
j--;
}
arr2[j]= index;
}
}
using namespace std;
main()
{
char t = 'f';
char *t1;
char **t2;
int choice;
vector<int> array;
for (int i = 1; i <= 1000; i++) {
printf("%d ", rand());
array.push_back(rand());
}
int *arr = new int[array.size()];
std::copy(array.begin(), array.end(), arr);
int *arr1 = new int[array.size()];
std::copy(array.begin(), array.end(), arr1);
int *arr2 = new int[array.size()];
std::copy(array.begin(), array.end(), arr2);
int choose;
do{
std::cout << "nnWelcome to the algortihm tester!n";
std::cout << "What algorithm would you like to test?";
std::cout << "nChoose: n1.Bubble Sortn2.Selection Sortn3.Insertion Sortn";
std::cout << "nNumber of choice: ";
scanf("%d", &choice);
switch(choice)
{
case 1:
{
clock_t tStart = clock();
bubbleSort(arr);
printf("Time taken: %.2fsn", (double)(clock() - tStart)/CLOCKS_PER_SEC);
}
break;
//bubble sort
case 2:
{
clock_t tStart = clock();
selectionSort(arr1);
printf("Time taken: %.2fsn", (double)(clock() - tStart)/CLOCKS_PER_SEC);
}
break;
case 3:
{
clock_t tStart = clock();
insertionSort(arr2);
printf("Time taken: %.2fsn", (double)(clock() - tStart)/CLOCKS_PER_SEC);
}
break;
}
printf("nDo you want to test the other algorithms?:<1-Yes/0-No>: ");
scanf("%d", &choose);
}while(choose != 0);
}
但是我继续获得0.00,我复制了三个随机变量阵列,以免使用排序的数组。看来阵列的传输是问题吗?我怀疑我的PC可以在那一瞬间对所有内容进行整理。一分钱你的想法?关于为什么我得到0.00?
这就像魅力
一样起作用#include<iostream>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <algorithm>
#include <time.h>
void bubbleSort(int arr[], int size)
{
int i, j;
for (i = (size - 1); i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (arr[j - 1]>arr[j])
{
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
}
void selectionSort(int arr1[], int size)
{
int i = 0, j = 0;
for (i = 0; i<size - 1; i++)
{
int min = j;
for (j = i + 1; j<size; j++)
{
if (arr1[j]<arr1[min])
{
min = j;
}
}
int temp = arr1[i];
arr1[i] = arr1[min];
arr1[min] = temp;
}
}
void insertionSort(int arr2[], int size)
{
for (int i = 1; i<size; i++)
{
int index = arr2[i];
int j = i;
while (j>0 && arr2[j - 1]>index)
{
arr2[j] = arr2[j - 1];
j--;
}
arr2[j] = index;
}
}
using namespace std;
void main()
{
char t = 'f';
char *t1;
char **t2;
int choice, choose, temp;
const int size = 10000;
int arr[size], arr1[size], arr2[size];
for (int i = 0; i < size; i++) {
temp = rand();
arr[i] = temp;
arr1[i] = temp;
arr2[i] = temp;
}
do {
std::cout << "nnWelcome to the algortihm tester!n";
std::cout << "What algorithm would you like to test?";
std::cout << "nChoose: n1.Bubble Sortn2.Selection Sortn3.Insertion Sortn";
std::cout << "nNumber of choice: ";
cin >> choice;
switch (choice)
{
case 1:
{
clock_t tStart = clock();
bubbleSort(arr,size);
printf("Time taken: %.2fsn", (double)(clock() - tStart) / CLOCKS_PER_SEC);
}
break;
//bubble sort
case 2:
{
clock_t tStart = clock();
selectionSort(arr1, size);
printf("Time taken: %.2fsn", (double)(clock() - tStart) / CLOCKS_PER_SEC);
}
break;
case 3:
{
clock_t tStart = clock();
insertionSort(arr2, size);
printf("Time taken: %.2fsn", (double)(clock() - tStart) / CLOCKS_PER_SEC);
}
break;
}
printf("nDo you want to test the other algorithms?:<1-Yes/0-No>: ");
cin >> choose;
} while (choose != 0);
}
我认为插入是最快的
您的int arr []
与int *
相同。它不带有数组尺寸信息。
您需要分别传递数组中的元素数量。
编辑:您可能会得到sizeof(指针(= 8 sizeof(element为int(= 4的长度为2。根本不是您打算的。
您正在使用一种不必要的复杂方式来创建数组。
#include <iostream>
#include <ctime>
#include <iomanip> //setprecision
#define N 10000
using namespace std;
void bubbleSort(int p[]);
int main() {
int i, *p = new int[N]; //create int array named p with N size
for (i = 0; i < N; i++) {
p[i] = rand();
}
clock_t tStart = clock();
bubbleSort(p);
cout << "Time taken: " << setprecision(2) << (double)(clock() - tStart) / CLOCKS_PER_SEC << "s" <<endl;
return 0;
}
void bubbleSort(int p[]) {
int i, j, temp;
for (i = 1; i<N; i++) {
for (j = N - 1; j >= i; j--) {
if (p[j - 1] > p[j]) {
temp = p[j - 1];
p[j - 1] = p[j];
p[j] = temp;
}
}
}
}
如果要在编码时动态更改数组大小,请使用#Define n。测试要简单得多。
如果要设置多少位数字打印,则可以使用cout使用setPrecision。检查一下,真的很漂亮:http://www.cplusplus.com/reference/iomanip/setprecision/也有助于保持一切统一。
如果您想要更好的随机性,则可以使用srand(time(null((;它基本上将系统时间用作种子来生成随机数。这不是完美的,但这是一个进步。
相关文章:
- 使用C++程序合并排序没有得到正确的输出
- 为什么在这个代码结束循环中没有得到结束
- 为什么在读取文件大小时文件IO速度会发生变化
- 序列化,没有库的整数,得到奇怪的结果
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 计算缩放多边形的比例,得到给定的多边形面积
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 为什么我在使用void函数时得到错误代码C2276
- 如何在cuSparse中得到稀疏矩阵的对角线
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 方法内部但循环仍得到预期的不合格id错误C++
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 为什么我在输出端得到 nan?
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 使用 bfs 解决连接组件问题时得到错误的答案
- C++:分拣的测试速度 - 得到 0.00
- 从位置矢量得到速度矢量