c - 如何检查排序算法的大 O 表示法?
问题描述
我不知道如何解决它的复杂性等。如何知道它是否比其他排序算法更快?
我发现很难找到它,因为我的数学有点差。
#include <stdio.h>
int func(int arr[])
{
int temp;
int numofarrays=9999;
for(int runtime=1; runtime<=numofarrays/2; runtime++)
{
for(int i=0; i<=numofarrays; i++)
{
if(arr[i] > arr[i+1])
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
if(arr[numofarrays-i-1] > arr[numofarrays-i])
{
temp=arr[numofarrays-i-1];
arr[numofarrays-i-1]=arr[numofarrays-i];
arr[numofarrays-i]=temp;
}
}
}
for(int i=0; i<=9999; i++)
{
printf("%i\n",arr[i]);
}
}
int main()
{
int arr[10000];
for(int i=0; i<=9999; i++)
{
arr[i]=rand() % 10;
}
func(arr);
}
解决方案
大 o 符号是您编写的代码的步数限制到无穷大的地方。由于极限趋于无穷大,我们忽略系数并查看最大值。
for(int runtime=1; runtime<=numofarrays/2; runtime++)
{
for(int i=0; i<=numofarrays; i++)
{
这里,第一个循环的最大项是n,第二个循环的最大项是n。但是由于循环 2 为第一个循环的每一圈转 n 圈,所以我们将 n 乘以 n。结果是 O(n^2)。
推荐阅读
- java - VSCode 是否可以选择为 java 类“创建测试”?
- php - Elastic Beanstalk 上的 PHP 编写器
- c++ - 一个简单的 3 文件项目中的循环依赖
- python - IOError:[Errno 25] 设备的 ioctl 不合适
- html - 不同的渲染 VS IISExpress 与生产 IIS
- java - 有没有办法为不同的客户构建一个具有相同基础但具有模块化的项目,这些功能将在运行时发现?
- javascript - 我可以构建一个子集合吗?(火库)
- jquery - 如何使用 jquery 日历控件显示图标?
- php - 如何在 php eval() 中捕获解析错误?
- reactjs - 如何检查 fetch 是否通过,如果是,则显示它?反应原生