数字排序 o(n)时间 o(1)空间
来源:互联网 发布:java抽象工厂 编辑:程序博客网 时间:2024/06/07 06:59
一个时间复杂度为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)
- 心理辅导平台设计
- 【安卓小笔记】v7包下SearchView的基本使用
- 【金融财经】金融市场一周简报(2017-12-01)
- 公众号每次调用接口时,可能获得正确或错误的返回码,开发者可以根据返回码信息调试接口,排查错误。 全局返回码说明如下:
- 织梦dede后台发布文章后后台显示空白页面解决办法
- 数字排序 o(n)时间 o(1)空间
- jniLibs.srcDirs不能打包so到apk中?
- android开发中布局和代码块不能同步(可能findViewById找不到对应布局的id),这是因为安装的android stodio没有设置自动!
- day 36 Linux日常运维
- 设计模式——单例模式
- mybatis四大神器之二-改
- js--打卡--12.04数组学习
- BZOJ4408: [Fjoi 2016]神秘数
- lwj_C#_周总结1