/*
空间换时间的例子:
在给定的无序的一组数,将其从小达到排序。
要求:线性时间排序,时间复杂度为O(n)
思路:
先扫描整个数组,找出最大值max,开辟temp[max]的数组。再次扫描数组,
但这次需要做的工作是a[i]=i,排序ok,可以看出来浪费了90个空间,这
就是典型的空间换时间的例子。时间复杂度在O(n).
*/
#include <stdio.h>
#define N 10
void SpaceToTime(int *array);
int main (int argc, const char * argv[])
{
int a[N] = {5,23,57,98,34,67,89,76,34,74};
SpaceToTime(a);
return 0;
}
void SpaceToTime(int *array)
{
int i = 0;
int max=array[0];
for(i = 1;i<N;i++) //找出最大值
if(array[i]>max)
max = array[i];
int temp[max]; //开辟数组大小为max的空间
for(i = 0;i<max;i++)
temp[i] = -1; //初始化为-1,表示没有修改过数,暂不考虑为负数的情况
for (i = 0; i<N; i++)
temp[array[i]] = array[i];//线性时间排序
for (i = 0; i<max; i++) { //输出
if (temp[i]!=-1) {
printf("%d ",temp[i]);
}
}
}
简单空间换时间排序的例子
最新推荐文章于 2023-05-15 16:14:01 发布