看到一道算法面试题,比较有趣,我自己用C做了一下。
题目:随机生成10个100以内的整数,把数据从小到大排序,而且算法复杂度只能是1。
这个算法比较有意思的地方是,首先建立一个数组B,其元素个数为数组A的最大元素值,然后用A的元素作为B的数组下标,然后给存在的B元素赋值,这样就可以用循环把下标输出出来。
C程序如下:
#include#include #include #define random(x) (rand()%x) main() { int lengthA, lengthB, i; int wait; int arrayA[10]; // 定义一个数组 int arrayB[101]; srand(time(NULL)); // 让每次产生的随机数都不一样 lengthA = sizeof(arrayA) / sizeof(arrayA[0]); lengthB = sizeof(arrayB) / sizeof(arrayB[0]); // 给数组赋值 for(i = 0; i <10; i++) arrayA[i] = random(100); printf("随机生成的数组A的元素为 \n"); // 输出数组 for(i = 0; i <10; i++) printf("%d\n", arrayA[i]); for (i = 0; i 程序运行结果:
随机生成的数组A的元素为 79 62 87 43 32 52 72 88 44 53 排序后的结果为 32 43 44 52 53 62 72 79 87 88本文地址:http://www.nowamagic.net/librarys/veda/detail/508,欢迎访问原出处。