天天看點

有N個大小不等的自然數(1--N),請将它們由小到大排序。

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

繼續閱讀