数字排序 o(n)时间 o(1)空间
来源:互联网 发布:栅格数据是什么意思 编辑:程序博客网 时间:2024/05/29 16:30
一个时间复杂度为O(n),空间复杂度为O(1)的排序算法 收藏
一个时间复杂度为O(n),空间复杂度为O(1)的排序算法
一个时间复杂度为O(n),空间复杂度为O(1)的排序算法
来源:http://blog.csdn.net/rerli/archive/2003/12/18/19041.aspx#508832
有N个大小不等的自然数(1--N),请将它们由小到大排序。
要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
从这道题出题意图来看,出题者主要是想考面试者的思维是否敏捷清醒、做事是否认真仔细是否善于思考、基本知识掌握程度如何。为什么这么说呢,第一这道题的确不难,就是一般排序。排序的方法在数据结构中讲得实在是太多了,各种各样的选择排序、插入排序、冒泡排序、希尔排序、堆排序、快速排序等等。但是,用心的人就记得它们当中没有一个算法复杂度是O(n),且不说空间复杂度要满足O(1)。第二就是这道题真正的考点就是看你能否想到数组的下标与这N个数存在的关系。这就是考题中的个小玄机。这N个数随你怎么乱序,排好序后就是数组(让下标从1开始)下标为1的元素,里面放的就一定是1,下标为n的元素,里面放的就一定是N。观察出这点,题目就解决了。
void sort(int e[], int n)
{
int i;
int t; /*临时变量:空间复杂度O(1)*/
for (i=1; i<n+1; i++)="" *时间复杂度o(n)*=""
{
while(e[i]!=i)
{
j++;
t = e[e[i]]; /*下标为e[i]的元素,排序后其值就是e[i]*/
e[e[i]] = e[i];
e[i] = t;
}
}
}
{
int i;
int t; /*临时变量:空间复杂度O(1)*/
for (i=1; i<n+1; i++)="" *时间复杂度o(n)*=""
{
while(e[i]!=i)
{
j++;
t = e[e[i]]; /*下标为e[i]的元素,排序后其值就是e[i]*/
e[e[i]] = e[i];
e[i] = t;
}
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/l_r_h/archive/2007/05/18/1614163.aspx
阅读全文
0 0
- 数字排序 o(n)时间 o(1)空间
- 数字排序 o(n)时间 o(1)空间
- 稳定排序问题,要求O(n)时间,O(1)空间
- 时间复杂度O(n),空间复杂度O(1)的排序
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 返回数组中任意某个重复的数字--时间复杂度O(n)空间复杂度O(1)
- 【100题】第四十九题 排序,要求时间复杂度O(n),空间复杂度O(1)
- 排序的时间复杂度为O(n),空间复杂度为O(1)
- 时间复杂度为O(N),空间复杂度为O(1)的排序算法
- 第四十九题(排序,要求时间复杂度O(n),空间复杂度O(1))
- 计数排序算法,时间复杂度O(n),空间复杂度O(1)
- 一致性 hash 算法( consistent hashing )
- 数字转换为汉语中人民币的大写
- FPGA跨时钟域处理数据总结
- C 注释
- linux下IPTABLES配置详解
- 数字排序 o(n)时间 o(1)空间
- 类的中介的使用方法
- [Leetcode从零开刷]7. Reverse Integer
- 日文IT词汇的中文翻译
- elasticSearch安装常见错误或问题
- PHP学习(9)-Email
- LINUX 查看CPU信息
- Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
- angularJS自定义指令各配置项详解