有1,2,……一直到n的无序数组,求排序算法,并且要求……

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:33:32
有1,2,……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且一次只能交换两个数。

哪位高手帮我解答一下这道题!谢谢了!
皇家救星1985 - 江湖少侠 请你说明一下你对时间和空间复杂度的计算好不好?谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
int mysort(int n, int a[])
{
//这个函数就是你问题的答案
//参数n代表数组元素个数,a数组是1,2,……一直到n的无序数组
int temp;
for(int i = 0; i < n; i++)
{
temp = a[a[i] - 1];//将a[i] - 1上的数字保存到temp
a[a[i] - 1] = a[i];//将i上的数字调到正确位置a[i] - 1
a[i] = temp;//并将原来a[i] - 1位置上的数字移到i上
}
return 0;
}

int main()
{//main函数是为了测试用的,只是证明上面函数的正确,与问题无关
int array[100];
int N = 10;
printf("原始数组\n");
for(int i = 0; i < N; i++)
{
array[i] = N - i;
printf("%2d ", array[i]);
}//初始化一个测试数组
printf("\n");

mysort(N, array);
//将数组排序

printf("\n排序后的数组\n");
for(i = 0; i < N; i++)
{
printf("%2d ", array[i]);
}//输出数组
printf

有1,2,……一直到n的无序数组,求排序算法,并且要求…… 一个数组有n个数,无序,找出从大到小排列在第k位的数,其中1<=k<=n,C/C++实现 有n个无序的数存放在a数组中,请将相同的那些数删得只剩下一个,输出经过删除后的数列. 求助PASCAL:有n个无序的数存放在a数组中,请将相同的那些数删得只剩下一个,输出经过删除后的数列. 称能表示成1+2+3+…+K的形式的自然数为三角数.有一个四位数N,它既是三角数,又是完全平方数.N= 已知an = log (n+1) (n+2),我们把使乘积a1a2…an为整数的数n称为“劣数” 从0,1,2,…依次一直写到1000000,那么这些数的所有数码的和是____? 从1*2*3*4一直乘到N,求末尾的0有几个,如何用PASCAL编 用数学归纳法证明(n+1)(n+2)…(n+n)=2^n*1*3*…*(2n-1)时,从n=k到n=k+1,左边需增乘的代数式是? 求n最大值,1的平方加2的平方一直加到n的平方,小于等于10000