我遇到一个C++排序的问题故障,有大神能解决否?
本人小菜鸟,最近学到使用标准库的排序函数qsort()。但是在测试时发现,常见的排序算法都能正常排序,但是使用qsort后总会有一个错误的逆序,太令人费解了?以下是测试结果
新排序法02
Runtime is: 63.3284 ms.
新排序法
Runtime is: 9217.69 ms.
冒泡排序法
Runtime is: 35644.4 ms.
选择排序法
Runtime is: 33746.1 ms.
指针式选择排序法
Runtime is: 10347.1 ms.
C++标准库排序
Runtime is: 33.1877 ms.
99505 2147469257 2147469406 -1569897150 -1200968838 One Reverse order. //只有标准库的qsort出现了一条随机的逆序错误。
n-2项 n-1项 n项 n+1项
C:\Users\ZH11002\source\repos\TEST0002\x64\Debug\TEST0002.exe (进程 9308)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
以下是代码
程序代码:
#include <iostream> #include <stdio.h> #include <bitset> #include <stdlib.h> #include <random> #include <Windows.h> #pragma warning(disable:4996) constexpr auto NUM01 = 100000; using namespace std; int qsortnum(const void* a, const void* b) { int* aa = (int*)a; int* bb = (int*)b; return *aa - *bb; } int main() { int* a = new int[NUM01]; random_device rd; LARGE_INTEGER freq01; LARGE_INTEGER begintime01; LARGE_INTEGER endtime01; double microsecond01; QueryPerformanceFrequency(&freq01); // 获取时钟周期 /////////////////////////////////// for (int i = 0; i < NUM01; i++) { a[i] = rd(); } QueryPerformanceCounter(&begintime01); // 开始计时 qsort(a, NUM01, sizeof(int), qsortnum); QueryPerformanceCounter(&endtime01);//结束计时 microsecond01 = (double)(endtime01.QuadPart - begintime01.QuadPart) * 1e3 / (double)freq01.QuadPart; cout << "C++标准库排序" << endl; cout << "Runtime is: " << microsecond01 << " ms." << endl; for (int i = 0; i < NUM01 - 1; i++) { if (a[i] > a[i + 1]) { cout << i << " " << a[i - 1] << " " << a[i] << " " << a[i + 1] << " " << a[i + 2] << " One Reverse order." << endl; } } delete[] a; }