要求程式算法:時間複雜度為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。
}