有1,2,3一直到n的无序数组,排序
2011-09-15 16:18
218 查看
题目:有1,2,3,..n 的无序整数数组,求排序算法。
时间复杂度 O(n) 空间复杂度O(1)
分析:
对于一般数组的排序显然 O(n) 是无法完成的。
既然题目这样要求,肯定原先的数组有一定的规律,让人们去寻找一种机会。
例如:原始数组:
a = [ 10, 6,9, 5,2, 8,4,7,1,3 ]
如果把它们从小到大排序且应该是
b = [1,2,3,4,5,6,7,8,9,10 ]
也就是说: 如果我们观察 a --> b 的对映关系是:
a[ i ] 在 b 中的位置是 b[ a[i] - 1]
时间复杂度 O(n) 空间复杂度O(1)
分析:
对于一般数组的排序显然 O(n) 是无法完成的。
既然题目这样要求,肯定原先的数组有一定的规律,让人们去寻找一种机会。
例如:原始数组:
a = [ 10, 6,9, 5,2, 8,4,7,1,3 ]
如果把它们从小到大排序且应该是
b = [1,2,3,4,5,6,7,8,9,10 ]
也就是说: 如果我们观察 a --> b 的对映关系是:
a[ i ] 在 b 中的位置是 b[ a[i] - 1]
#include<iostream> using namespace std; void sortoneton(int a[],int n) { for(int i=0;i<n;) { int temp=a[a[i]-1]; a[a[i]-1]=a[i]; a[i]=temp; if(a[i]==i+1) i++; } for(int i=0;i<n;i++) cout<<a[i]<<","; } int main() { int a[10]={10,6,9,3,2,5,7,1,8,4}; sortoneton(a,10); return 0; }
相关文章推荐
- 有1,2,3一直到n的无序数组,排序
- 两个数字,1000个元素的有序数组和10个元素的无序数组,把他们整合成一个按照有序数组排序方式排序的有序数组
- 不排序,两种方法找到无序数组的最大K个数
- 无序数组排序
- 【javascript每日一练】- 无序数组排序
- 有1,2...一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),时间复杂度为O(1)
- 两个数组[n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- 不排序,两种方法找到无序数组的最大K个数
- 求无序数组排序后相邻俩数最大差值(思路及详解)
- 算法1:一个无序的int数组,包含正负数, 排序成:左边为负数 右边为正数
- iOS 数组的去重(普通的无序的去重和排序好的去重)
- 无序数组 的特殊排序
- day21桶排序一个无序数组+求一个无序数组中的中位数
- 无序数组排序后的最大相邻差值
- 排序1,2......n的无序数组,时间复杂度为o(n),空间复杂度为o(1)
- 用堆排序将整形无序数组排序
- 有1,2,....一直到n的无序数组,求排序算法,要求时间复杂度为O(n),空间复杂度O(1)
- 桶---求无序数组排序后,最大的相邻差值
- C/C++面试之算法系列--1~n无序数组时间复杂度为O(n)排序
- iOS 数组的去重(普通的无序的去重和排序好的去重)