如何对n个数进行排序,要求时间复杂度o,空间复杂度o

2020-11-18 22:14:12 字数 3503 阅读 9419

1楼:mean有方法的

o什么,要知道,排序理论最快时间复杂度只能是nlogn,不能再快,这是有证明的。想要提高速度用c++函数库的qsort();

如何对n个数进行排序,要求时间复杂度o,空间复杂度o

2楼:钟萌纳

题目:如何对n个不重复出现的整数序列进行排序,已知这些数的范围为(0-65535),要求时间复杂度o(n),空间复杂度o(1)分析:可以申请一个大小为65536的数组a,数组的x下标代表数字x,a[x]代表x 在整数序列中出现的次数.

扫描一遍整数序列就可以完成对该整数序列的排序,时间复杂度为o(n)应为已知范围,申请大小为65536的数组,大小为常量,所以空间复杂度为o(1)**:1:#include 2:

#define size 65536 3:void rangesort(int *array,int len) 4:{ 5:

int data[size] ; 6:int i = 0 ; 7:int j = 0 ; 8:

memset(data,0,size*sizeof(int)) ; 9:for(i=0;i

如何对n个数进行排序,要求时间复杂度o,空间复杂度o

3楼:匿名用户

o什么,要知道,排序理论最快时间复杂度只能是nlogn,不能再快,这是有证明的。想要提高速度用c++函数库的qsort();

4楼:超超露露恋

建议用qsort()函数,

它编译器函数库自带的快速排序函数。

使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷。

qsort 的函数原型是

void qsort(void*base,size_t num,size_t width,int(__cdecl****pare)(const void*,const void*));

如何对n个整数数进行排序,要求时间复杂度o(n),空间复杂度o(1)

5楼:等你爱我

题目:如何对n个不重复出现的整数序列进行排序,已知这些数的范围为(0-65535),要求时间复杂度o(n),空间复杂度o(1)分析:可以申请一个大小为65536的数组a,数组的x下标代表数字x,a[x]代表x 在整数序列中出现的次数。

扫描一遍整数序列就可以完成对该整数序列的排序,时间复杂度为o(n)应为已知范围,申请大小为65536的数组,大小为常量,所以空间复杂度为o(1)**:

6楼:迮蕊钊德润

可以申请一个大小为65536的数组a,数组的x下标代表数字x,a[x]代表x

在整数序列中出现的次数。扫描一遍整数序列就可以完成对该整数序列的排序,时间复杂度为o(n)

在限定时间复杂度o(n),空间复杂度o(1)条件下,对数组排序。要求大于0元素的在数字0左边,小于

7楼:缘明思

不知道数字的总量吗?

是否队首队尾指针相等,是则结束循环。

如果队首小于0,则观察队尾。

队尾大于0,则交换队首队尾。小于则,队尾保留,向队首移动1个比较直至可以交换。

等于0则

如果队尾指针为下一个队首指针的位置,则只比较和交换。

否则,交换该元素和其下一个元素。且不移动队尾指针。

如果队首大于0,则向队尾移动1个继续比较。

如果队首等于0,

如果队尾指针为下一个队首指针的位置,则只比较和交换。

否则,交换该元素和其下一个元素。且不移动队首指针。

由于0元素的存在和无法确定的数组长度,导致我想出来的这个破东西的时间复杂度大概是n+n/2

好像还是算作n的。

8楼:匿名用户

大神大声的告诉我什么排序方法的平均时间复杂度是o(n)?

c语言,时间复杂度与空间复杂度,算法时间公式t(n)=o(f(n)),与空间公式s(n)=o(f(n))

9楼:匿名用户

算法的时间复杂度:

为了便于比较同一问题的不同算法,通常从算法中抽取一种或者多种有代表性的基本操作,再以这些基本操作重复执行的次数与问题规模的关系t(n) 作为算法的时间性量度。

如果t(n) 和 f(n) 是n 的函数,当n →∞ 时,有t(n) / f(n) → c (常数c ≠ 0),记作:t(n) = o(f(n)),称o(f(n)) 为算法的渐近时间复杂度,简称时间复杂度。

算法的空间复杂度:

一个算法实现所占存储空间大致包含三方面:

1. 指令、常数、变量所占用的存储空间;

2. 输入数据所占用的存储空间;

3. 算法执行时所需的辅助空间;

前两者是必须的,通常将算法执行时所需的辅助空间作为分析算法空间复杂度的依据:s(n) = o(f(n)),其中f(n)的规则与时间复杂度一致。

数字没有出现,哪些数字出现了多少次.要求时间复杂度o 空间复杂度o

10楼:某某知识博士

题目:如何对n个不重复出现的整数序列进行排序,已知这些数的范围为(0-65535),要求时间复杂度o(n),空间复杂度o(1)分析:可以申请一个大小为65536的数组a,数组的x下标代表数字x,a[x]代表x 在整数序列中出现的次数。

扫描一遍整数序列就可以完成对该整数序列的排序,时间复杂度为o(n)应为已知范围,申请大小为65536的数组,大小为常量,所以空间复杂度为o(1)**:?? 1: #include2:

#define size 65536 3: void rangesort(int *array,int len) 4: 12:

i = 0 ; 13: for(j=0;j

11楼:阳光下追梦

遍历一遍即可啊 时间按复杂度o(n);

对于输入为n个数进行快速排序算法的平均时间复杂度是多少?

12楼:cfv呆呆兽

根据t(n) = t(n) + o(n) (0 < <1) 则有 t(n) = o(n)

因此关键问题

是怎样解决划分标准的问题, 因此产生下列线性时间找中位数的算法:

将数组a有n个元素, 划分成5个一组, 则共有[n/5]个元素, 对于每组用一般的排序找中位数,需要25次, 则总共需要o(25*[n/5]) = o(n), 然后在这些中位数中递归找其中位数需要t(n/5)次,然后以找到的中位数x来作为划分标准则显然划分时间为o(n), 再递归的划分, 显然最多有3n/4的元素小于或大于x, 则选择中位数的总复杂度为:

t(n) = o(n) + t(n/5) + t(3n/4) 有t(n) = o(n)。

因此快速排序的复杂度为t(n) = 2t(n/2) + o(n) 有:t(n) = nlogn。

但最坏情况下复杂度为o(n^2),出现此条件的情况是n个数原来就已经按照规定要求排好序了。

各种排序法的时间复杂度到底多少,各种排序法的时间复杂度到底多少 10

1楼 世界文明导师 根据《算法导论 中文版 》p83 以及《算法 中文版 》部分章节版内容 算法 最坏情况运行时权间 平均情况 冒泡 插入 选择 排序 n 2 n 2 快速排序 n 2 n log n 希尔排序 希尔增量 n 2 n 1 3 2 堆排序 n log n n log n 注 希尔排序的...