一路面试题,大家看看

一道面试题,大家看看
有一个整型数组int[100],把1-100随机放到这个数组里,数字不能重复,怎样能完成要求。

------解决方案--------------------

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SWAP(a,b) {int tmp = a; a = b; b = tmp;}

int main(void)
{
int a[100];
int i;
int j;
        srand(time(NULL));
for (i = 0; i < 100; i ++)
a[i] = i;

for (i = 0; i < 100; i ++)
{
j = rand() % 100;
SWAP(a[i], a[j])
}

        for (i = 0; i < 100; i ++)
printf("%d ", a[i]);
return 0;
}


线性时间。
------解决方案--------------------
洗牌算法还有这么多讲究啊!这个不错!
http://developer.51cto.com/art/201210/360722.htm
------解决方案--------------------
coolshell测试过的效率还不错的一个算法
void Shuffle(int* arr,n)
{
int index;
if(n==0)
return;
else
while(n--){
index=rand()%n; 
swap(arr[n],arr[index]);
}

}
void Swap(int& a, int& b){
a=a+b;
b=a-b;
a=a-b;
}