c语言利用索引数组排序,利用数组索引进行排序

看到一道算法面试题,比较有趣,我自己用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 < 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值