这个算法的时间复杂度怎么算?

Flammable_ice 2012-08-24 11:55:08

void sort(int a[], int n)
{
for (int gap = n / 2; gap > 0; gap /= 2)
for (int i = gap; i < n; ++i)
for (int j = i - gap; j >= 0 && a[j + gap] < a[j]; j -= gap)
{
int temp = a[j];
a[j] = a[j + gap];
a[j + gap] = temp;
}
}

//需要计算过程
...全文
137 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
无事所所 2012-08-27
  • 打赏
  • 举报
回复
你去看<算法导论>前几张就是讲基础内容,有介绍递归程序求时间限的
独孤过儿 2012-08-27
  • 打赏
  • 举报
回复
shellsort要求的数学基础比较高,基本没人会耐心的敲那一大堆符号

偶给你找了个wiki上的回答,你自己看吧

http://en.wikipedia.org/wiki/Shellsort
Flammable_ice 2012-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
应该是 n^3
[/Quote]
应该是 n^1.25。我想知道解题过程。
Flammable_ice 2012-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 titer1 的回复:]
引用 1 楼 的回复:

C/C++ code

void sort(int a[], int n)
{
for (int gap = n / 2; gap > 0; gap /= 2)//这个我懂的。
for (int i = gap; i < n; ++i)//这个循环在这里是什么意思?(从希尔排序的角度出发看)
for (int j = i - gap; j >= 0 &am……
[/Quote]
结论早就知道,我就是要过程哦。
jains521 2012-08-26
  • 打赏
  • 举报
回复
应该是 n^3
titer1 2012-08-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

C/C++ code

void sort(int a[], int n)
{
for (int gap = n / 2; gap > 0; gap /= 2)//这个我懂的。
for (int i = gap; i < n; ++i)//这个循环在这里是什么意思?(从希尔排序的角度出发看)
for (int j = i - gap; j >= 0 &&……
[/Quote]

看到书上的结论:一般是小于n^2 ,有些还有小数点,比如 n^1.2 到n^1.5 具体过程没有给出。
template_cplus 2012-08-25
  • 打赏
  • 举报
回复
网易公开课 算法导论 第2课有讲 貌似
但个人认为 执行的循环次数 不能被 条件所迷惑 有时候代码也会玩技巧的 比如
#include <iostream>


int main()
{
int i =0;
int a[5];
int j=0;
for(i=0; i <=5; i++)
{
if(5==i )
{
a[i] = j++;
}
else
{
printf("1次\n");
}
}

return 0;
}

Flammable_ice 2012-08-25
  • 打赏
  • 举报
回复

void sort(int a[], int n)
{
for (int gap = n / 2; gap > 0; gap /= 2)//这个我懂的。
for (int i = gap; i < n; ++i)//这个循环在这里是什么意思?(从希尔排序的角度出发看)
for (int j = i - gap; j >= 0 && a[j + gap] < a[j]; j -= gap)//这个循环在这里是什么意思?(从希尔排序的角度出发看)

{
int temp = a[j];
a[j] = a[j + gap];
a[j + gap] = temp;
}
}




//这是希尔排序算法,时间复杂度要计算过程。

64,653

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧