也谈关于一道1到N自然数排序的华为面试题

来源:互联网 发布:网络被骗100 编辑:程序博客网 时间:2024/05/16 07:50

    在http://blog.csdn.net/hongyuan19/archive/2007/11/16/1887656.aspx看到《关于一道1到N自然数排序的华为面试题》,文中提到了一道华为面试题:

 

    有N个大小不等的自然数(1--N),请将它们由小到大排序。   
    要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。

 

    文中同时给出了该题的解法,但是从评论来看,还是有很多人不明白不理解。

 

    本人写了一段的程序,给出了这道题完整的程序以及验证程序,该程序在VS2005下执行通过;

    同时,本人在注释中给出了关于时间复杂度的简单证明,欢迎大家拍砖。

 

 

 

 

 

    最后提一下,有些人认为这道题没意义,既然是元素1-N,干嘛还排序,直接按顺序重写数组不就拉倒了。

    e.g 

    for (int i = 0; i < n; i ++) 

    {

       a[i] = i + 1;

    }

    so easy,

    但是——

    我们假设1-N只是一个结构体的key,那我们肯定就不能这么简单处理,而是需要利用key对这个struct数组进行排序,如此,这个题目是不是就有点意义了?