迅雷筆試題(C++)

/**//////////////////////////////////////////////////2
//迅雷筆試題:3
//有N個大小不等的自然數(shù)(1--N),請將它們由小到大排序。 4
//要求程序算法:時間復雜度為O(n),空間復雜度為O(1)。5

6
#define TEST_XUNLEI7

8
#ifdef TEST_XUNLEI9

10
#include <iostream>11
using namespace std;12
int sort(int data[],int n);13
int main()14


{15

int data[] =
{8,7,9,4,6,5,3,2,1};16
for(int i = 0 ;i < sizeof(data)/sizeof(int);i++)17
cout<<data[i]<<" ";18
cout<<endl;19
sort(data,sizeof(data)/sizeof(int));20
system("pause");21
return 1;22
}23
int sort(int data[],int n)24


{25
//保證空間復雜度為O(1)26
int tmp = 0; 27
for(int i = 0;i < n;i++) 28

{29
//移動,直到第data[i]為i+1的時,while結束循環(huán)。向后繼續(xù)判斷30
while(data[i] != i+1) 31

{ 32
//每次循環(huán)保證了data[i-1]的正確。總共有n個所以時間復雜度為O(N)33
tmp = data[data[i]-1];34
data[data[i]-1] = data[i]; 35
data[i] = tmp;36
}37
}38
for(int i = 0;i < n;i++)39
cout<<data[i]<<" ";40
cout<<endl;41
return 1;42
}43

44

45
#endif

