简明现代魔法 -> 计算机算法 -> 利用数组索引进行排序

利用数组索引进行排序

2010-07-23

看到一道算法面试题,比较有趣,我自己用C做了一下。

题目:随机生成10个100以内的整数,把数据从小到大排序,而且算法复杂度只能是1。

这个算法比较有意思的地方是,首先建立一个数组B,其元素个数为数组A的最大元素值,然后用A的元素作为B的数组下标,然后给存在的B元素赋值,这样就可以用循环把下标输出出来。

C程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#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 < lengthA; i++)
    {
        arrayB[arrayA[i]] = 101;
    }

	printf("排序后的结果为\n");

	for (i = 0; i < lengthB; i++)
    {
        if (arrayB[i] == 101)
            printf("%d\n", i);
    }

	//printf("%d", lengthA);
	scanf("%d", &wait);
}

程序运行结果:

随机生成的数组A的元素为
79
62
87
43
32
52
72
88
44
53
排序后的结果为
32
43
44
52
53
62
72
79
87
88
随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们