有1,2,....一直到n的无序数组,求排序算法,要求时间复杂度为O(n), 空间复杂度为O(1)
使用交换,而且一次只能交换两个数。
#include <iostream.h>
#include <assert.h>
#include <string.h>
void main(void)
{
int a[] = {2, 4, 1, 3};
int len = sizeof(a)/sizeof(a[0]);
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++)
{
cout < < a[j] < < " " ;
}
cout < < endl;
}
http://topic.youkuaiyun.com/u/20080101/12/9c6f4e7f-db88-4afb-b2d9-113070f9a971.html