要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
我看了网上的答案,感觉不正确,现在我自己写出的答案供大家参考。
#include <iostream>
#include <algorithm>
#include <iterator>
void sort(int*, int);
int main(){
int arr[] = {5,9,3,7,4,2,8,6,1,10};
int n = sizeof(arr)/sizeof(int);
sort(arr, n);
std::copy(arr,arr+n,std::ostream_iterator<int>(std::cout, ","));
std::cout << std::endl;
return 0;
}
void sort(int *arr, int n)
{
int count = 0;//此数据不是算法必须,用来计算算法循环次数。
int i;
int tmp;
for(i=0;i<n;++i){
while( (i + 1) != arr[i]){
tmp = arr[i];
arr[i] = arr[tmp-1];
arr[tmp-1] = tmp;
++count; //算法每循环一次加一。
}
}
std::cout << "count = " << count << std::endl; //最后得出的循环次数小于等于n。
}