有N个大小不等的自然数(1--N),请将它们由小到大排序。
要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
void
sort(
int
e[],
int
n)
{
int i;
int t; /* 临时变量:空间复杂度O(1) */
for (i = 1 ; i < n + 1 ; i ++ ) /* 时间复杂度O(n) */
{
t = e[e[i]]; /* 下标为e[i]的元素,排序后其值就是e[i] */
e[e[i]] = e[i];
e[i] = t;
}
}
void main()
{
#define MAX 10
int i, a[MAX + 1 ];
printf( " Input the number from 1 to %d: " ,MAX);
for (i = 1 ; i < MAX + 1 ; i ++ )
{
scanf( " %d " , & a[i]);
}
sort(a,MAX);
printf( " ====sort over==== " );
for (i = 1 ; i < MAX + 1 ; i ++ )
{
printf( " %d " ,a[i]);
}
printf( " " );
system( " pause " );
}
{
int i;
int t; /* 临时变量:空间复杂度O(1) */
for (i = 1 ; i < n + 1 ; i ++ ) /* 时间复杂度O(n) */
{
t = e[e[i]]; /* 下标为e[i]的元素,排序后其值就是e[i] */
e[e[i]] = e[i];
e[i] = t;
}
}
void main()
{
#define MAX 10
int i, a[MAX + 1 ];
printf( " Input the number from 1 to %d: " ,MAX);
for (i = 1 ; i < MAX + 1 ; i ++ )
{
scanf( " %d " , & a[i]);
}
sort(a,MAX);
printf( " ====sort over==== " );
for (i = 1 ; i < MAX + 1 ; i ++ )
{
printf( " %d " ,a[i]);
}
printf( " " );
system( " pause " );
}