急!!

paapa 2006-05-27 12:09:13
急!!
1,2,,,n有序数,无序分在数组a[n]里,对a[n]排序,从小到大,要求时间复杂度为n,空间复杂度为1??
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
snailbreak 2006-05-27
  • 打赏
  • 举报
回复
//有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),
//空间复杂度O(1),使用交换,而且一次只能交换两个数.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int print( int*, int );
int swap( int&, int& );
int main()
{
srand((unsigned)time(0));
int *a, n, i,j;
scanf( "%d", &n );
a = ( int* ) malloc ( ( n + 1 ) * sizeof( int ) );
for( i = 1; i <= n; i++ )
a[i] = i;
for( i = 1; i <= n; i++ )
swap( a[i], a[rand()%n+1] );
print( a, n );
for( i = 1; i <= n; i++ )
{
while( a[i] != i )
swap( a[i], a[a[i]] );

}
print( a, n );
return 0;
}

int swap( int &i, int &j )
{
int temp = i;
i = j;
j = temp;
return 0;
}

int print( int a[], int n )
{
int i;
for( i = 1; i <= n; i++ )
printf( "%4d", a[i] );
printf( "\n" );
return 0;
}


agaric 2006-05-27
  • 打赏
  • 举报
回复
没有时间复杂度为n的排序算法的.
paapa 2006-05-27
  • 打赏
  • 举报
回复
你好,你是说:
for(int i=0;i<n;i++)
a[i]=i+1;
??
property1 2006-05-27
  • 打赏
  • 举报
回复
循环 赋值

注意: 不要 一帖多贴
pbdwadr 2006-05-27
  • 打赏
  • 举报
回复
排序算法效率高的就在STL中的  sort()算法啊
没必要凡事从头做起吧

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧