C++:分拣的测试速度 - 得到 0.00

C++: Test Speeds of Sorting - Got 0.00's

本文关键字:得到 速度 测试 C++      更新时间:2023-10-16

我想测试三种算法的速度,这是我的完整代码:

#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((;它基本上将系统时间用作种子来生成随机数。这不是完美的,但这是一个进步。