另类排序

今天看到了一个比较有意思的排序题目,有数组1,2,3...到n,共n个无序元素。对其进行排序。要求时间复杂度为O(n),空间复杂度为O(1)。

思路:

看到这道题目的时候,突然想到,以前貌似做过一道类似的题目。但是,当时不会,然后在网上搜索了大牛的解法觉得有点搞。现在翻出来看了下,有可能是他们当时的题目有些问题。少了一个比较重要的条件。原题为100-49。

今天看到了比较犀利的解法,贴上代码:

#include <iostream>

using namespace std;

int main(){
	int a[] = {1,9,6,5,2,8,4,7,3,10};
	int len = sizeof(a)/sizeof(int);
	int temp;
	int count = 0;
	for(int i = 0;i < len;){
		++count;
		for(int j = 0;j<len;++j){
			cout << a[j] << " ";
		}
		cout << endl;
		for(int j = 0;j<len;++j){//对每次交换的两个数进行标记
			if(j == i || j == a[i]-1){
				cout << "|" << " ";
			}else{
				cout << " " << " ";
			}
		}
		cout << endl << endl;;
		temp = a[a[i]-1];
		//cout << "a[" << i << "] = " << a[i] << endl;
		a[a[i]-1] = a[i];
		a[i] = temp;
		if(a[i] == i+1){
			++i;
		}
	}
	for(int i = 0;i<len;++i){
		cout << a[i] << " ";
	}
	cout << endl;
	cout << "count is:" << count << endl;
	system("pause");
	return 1;
}

你可能感兴趣的:(另类排序)