您的位置:首页 > 职场人生

(转)关于一道1到N自然数排序的华为面试题

2010-11-23 09:38 459 查看
有N个大小不等的自然数(1--N),请将它们由小到大排序。
要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。


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

void sort(int arr[], int n)
{
int t;

for (int i = 0; i < n; i++)
{
while (arr[i] != i+1)
{
printf("===== arr[i]=%d, i=%d/n", arr[i], i);
t = arr[arr[i]-1];
arr[arr[i]-1] = arr[i];
arr[i] = t;

for (int j = 0; j < 10; j++)
{
printf("%d, ", arr[j]);
}
printf("/n");
}
}
}

int main(void)
{
int arr[10] = {10, 6, 3, 4, 2, 5, 9, 8, 1, 7};

sort(arr, 10);

for (int i = 0; i < 10; i++)
{
printf("%d, ", arr[i]);
}
printf("/n");

system("pause");
return 0;
}


原作者地址http://blog.csdn.net/zoudaokou2006/archive/2010/09/26/5906363.aspx#

代码是正确的,看来算法方面确实还是要加强。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: