基于时间复杂度为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
原创粉丝点击