基于时间复杂度为O(n)的排序算法
来源:互联网 发布:js 模态窗口 编辑:程序博客网 时间:2024/04/28 11:00
引题:有1,2,….一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1)。
快速排序被认为是速度最快算法 ,时间复杂度是:nlog(n),下面这个是O(n),当然是有一定的条件的,不具普遍性,但是它的思路还是挺有技巧的。
1~N的数组,那么排序后必然a[0]=1,a[1]=2,a[2]=3........也就是元素值必定是存放在比值小1的数组元素中,那么只需 a[n]和a[a[n]-1]相交换即可。有1,2,....一直到n 的无序数组, 求排序算法, 并且要求时间复杂度为O(n),空间复杂度O(1),使用交换, 而且一次只能交换两个数.(华为)
#include int main() { int a[] = {10,6,9,5,2,8,4,7,1,3}; int len = sizeof(a) / sizeof(int); int temp; for(int i = 0; i < len; ) { temp = a[a[i] - 1]; a[a[i] - 1] = a[i]; a[i] = temp; if ( a[i] == i + 1) i++; } for (int j = 0; j < len; j++) cout<<a[j]<<","; return 0; }
0 0
- 基于时间复杂度为O(n)的排序算法
- 时间复杂度为O(n)的排序算法--计数算法
- 基于堆栈的时间复杂度为O(n)的箱子排序算法实现
- 时间复杂度为O(n)的排序算法
- 面试9:时间复杂度为O(n)的排序算法
- 时间复杂度为O(N),空间复杂度为O(1)的排序算法
- 时间复杂度为O(n)的排序
- 时间复杂度为O(n)的排序
- 实现排序算法,时间复杂度为O(n)
- 不用额外空间的整数交换以及时间复杂度为O(n)空间复杂度为O(1)的排序算法
- Java练习:时间复杂度为O(n*n)的三大基本排序算法
- O(N)时间复杂度的排序算法-计数排序
- 时间复杂度为O(n+t)的排序
- 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
- 有1,2...一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),时间复杂度为O(1)
- 排序的时间复杂度为O(n),空间复杂度为O(1)
- 排序算法-o(n)时间复杂度
- 平均时间复杂度为O(n)的选择算法
- 欢迎使用CSDN-markdown编辑器
- Linux服务器使用五:搭建属于自己的SVN服务器
- mac word 同时查看文档两个部分
- (*(volatile unsigned int *))详解
- fiddle抓包测试环境部署
- 基于时间复杂度为O(n)的排序算法
- 关于ssh服务器的使用
- 数组中只出现一次的数字
- ubuntu14.04+nvidia1070+CUDA8.0+CUDNN5.0+opencv2.4.9安装配置
- pat甲1116. Come on! Let's C(模拟)
- 关于单例、关于DCL:Double Check Lock、关于volatile
- 第三十五讲项目5——在北京买房
- 入门demo---Mybatis学习笔记(三)
- IIS部署ASP.NET网站