有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.
int main()
{
int a[] = {10,6,9,5,2,8,4,7,1,3};
int len = sizeof(a) / sizeof(int);
int temp;
for(int i = 0; i < len; )
{
temp = a[a[i] - 1];
a[a[i] - 1] = a[i];
a[i] = temp;
if ( a[i] == i + 1)
i++;
}
for (int j = 0; j < len; j++)
printf("%d,",a[j]);
return 0;
}
本文介绍一种特殊的排序算法,该算法能在O(n)的时间复杂度内完成对1到n无序数组的排序,同时空间复杂度为O(1),通过交换元素实现排序,并附带示例代码。
708

被折叠的 条评论
为什么被折叠?



