zoukankan      html  css  js  c++  java
  • 简单一道排序题,考倒多少读书人

    从华为一道面试题来看看吧,原题大意是这样的:
     

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

     有人这样做:

    void sort(int e[], int n)
    {
     
    int i;
     
    int t; /*临时变量:空间复杂度O(1)*/

     
    for (i=1; i<n+1; i++/*时间复杂度O(n)*/
     {
      t 
    = e[e[i]]; /*下标为e[i]的元素,排序后其值就是e[i]*/
      e[e[i]] 
    = e[i];
      e[i] 
    = t;
     }
    }

    void main()

     
    #define MAX 10
     
    int i, a[MAX+1]; 
     
     printf(
    "Input the number from 1 to %d:/n",MAX);
     
    for (i=1; i<MAX+1; i++)
     {
      scanf(
    "%d",&a[i]);
     }
      
     sort(a,MAX);

     printf(
    "/n====sort over====/n");
     
    for (i=1; i<MAX+1; i++)
     {
      printf(
    "%d ",a[i]);
     }

     printf(
    "/n");
     system(
    "pause");
    }

    上述答案其实是不对的,请看下面:

    void sort(int e[], int n)
    {
    int i;
    int t; /*临时变量:空间复杂度O(1)*/

    for (i=1; i<n+1; i++/*时间复杂度O(n)*/
    {
    while(e!=i)
    {
       t 
    = e[e]; /*下标为e的元素,排序后其值就是e*/
       e[e] 
    = e;
       e 
    = t;
    }
    }

     这个while 实在是太强大了,心血沸腾,于是赶紧记录之。

  • 相关阅读:
    http和https
    openstack
    openstack安全问题
    openstack优势
    java多线程实现方式
    python多进程实现的几种方式
    Java 在提取url 生成图片以及正则表达式
    idea 生成 可执行文件
    dw cs6 支持高分辨率
    svchost.exe 大量占用的问题
  • 原文地址:https://www.cnblogs.com/liulei/p/2182681.html
Copyright © 2011-2022 走看看