1~~1000的分半查询

weixinfu3753 2009-05-16 04:54:51
本人菜鸟,问下大虾一个问题,“用分半排序1~~1000,最多排多少次,最少排多少次?”,希望各位大虾给出一个详细的解答,现在这里谢了!!!
...全文
87 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdop 2009-05-18
  • 打赏
  • 举报
回复

折半查找;
归并排序;

研究算法,把名字先搞清再讨论
绿色夹克衫 2009-05-18
  • 打赏
  • 举报
回复
二分查询还是二分排序(什么是二分排序?)?
weixinfu3753 2009-05-18
  • 打赏
  • 举报
回复
谢了,的确,搞的脑子都晕了,呵呵!!
jn989 2009-05-17
  • 打赏
  • 举报
回复
3楼已经很详细了,最坏nlogn,最好线性
coxfilur_2008 2009-05-17
  • 打赏
  • 举报
回复
同问:
[Quote=引用 2 楼 sunzerui 的回复:]
好乱
题目:1~~1000的分半查询
而内容:用分半排序1~~1000,最多排多少次,最少排多少次?
楼主,你到底要查找还是排序??
[/Quote]
luminary123 2009-05-16
  • 打赏
  • 举报
回复

void MergeSort(int *data, int low, int high)
{
// 参数data表示要排序的数组,low表示第一个下标,high表示最后一个下标
if (low>=high)
return;

int vector, left, right;
left=low, right=high;
vector=data[left++];
while (1)
{
while (data[left]<vector&&left<high) left++;
while (data[right]>vector&&right>low) right--;
if (left<right)
{
Swap(&data[left], &data[right]);
left++, right--;
}
else break;
}
if (low!=right)
{
Swap(&data[low], &data[right]);
}

MergeSort(data, low, right-1);
MergeSort(data+right+1, right+1, high);
}
void Swap(int* a, int* b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

1, 2, 3, ..., n, 没有交换; n, 999, ..., 1, 交换n/2次
假设长度为n的序列用时T(n),则有最坏的T(n)=n+2*T(n/2),计算可得Θ(nlgn)。
sunzerui 2009-05-16
  • 打赏
  • 举报
回复
好乱
题目:1~~1000的分半查询
而内容:用分半排序1~~1000,最多排多少次,最少排多少次?
楼主,你到底要查找还是排序??
really3353 2009-05-16
  • 打赏
  • 举报
回复
楼主说的归并排序吧?最坏的情形是NlgN,也就是1000 * lg 1000
最好的情形应该是线性的吧

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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