如何对n个大小都小于100的整数进行排序,要求时间复杂度O(n),空间复杂度O(1)。

提示:hash表

#include 
using namespace std;

#define N 100
#define RANGE 100

int* getRandomArray() {
	int* randomArr = new int[N];
	srand(unsigned(time(0)));
	for (int i = 0; i < N; i++) {
		randomArr[i] = rand() % 99 + 1;
	}
	return randomArr;
}

void prinfArray(int* sortCount, int len) {
	for (int i = 0; i < len; ++i) {
		for (int j = 0; j < sortCount[i]; ++j) {
			cout << i << " ";
		}
		if ((i + 1) % 10 == 0) {
			cout << endl;
		}
	}
}

int main() {
	int* src = getRandomArray();

	//记录出现次数,再还原,RANGE为常数则,空间复杂度O(1)
	int* sortCount = new int[RANGE];
	memset(sortCount, 0, sizeof(int) * RANGE);

	for (int i = 0; i < N; ++i) {
		sortCount[src[i]]++;
	}
	prinfArray(sortCount, RANGE);
	return 0;
}


你可能感兴趣的:(算法-数组)