一种新排序算法的探讨

  前段时间在问答上回答问题时,用脑洞开了一种新的排序算法【本人涉猎范围不大,所以个人认为是新的,如果雷同,见笑了】,简短的说就是追求速度,用空间换时间。以下是源代码:
#include <stdio.h>
#include <stdlib.h>
#define  MAX 1000
#define  range 10000 //请注意这个range的作用!

void space(int *a)
{
	int i,j=0;
	int temp[range];// 这是副本数组,它的作用是当做重排目标数组的中转站。

	for (i=0; i<range; i++) temp[i] = 0;  // 把temp数组的所有元素初始化为0。

	for (i=0; i<MAX; i++)   temp[a[i]]++; //遍历目标数组,将目标数组中出现的
                                              //数值元素设为temp数组的下标,
	                                      //以统计这个数值共出现了多少次。

	for (i=0; i<range; i++)
	{
		while( temp[i] != 0)  // 检测i这个数值是否在目标数组中出现过,0表示没出现过。
		{
			a[j++] = i; // 用出现过的i数值重新为目标数组赋值。
			temp[i]--;
		}
	}
}
int main()
{
	int i;
	int arr[MAX]; //这个是待排序的目标数组。

	for (i=0; i<MAX;i++) arr[i] = rand()%range; // 初始化目标数组。

	
	for(i=0; i<MAX; i++) printf("%d ",arr[i]);
    system("pause");

	space(arr); // 用这个函数对目标数组进行排序
    
	for (i=0; i<MAX;i++)	printf("%d ",arr[i]);
    system("pause");
	return 0;
}
这个算法的优点就是快,虽然没有经过比较测试,但我可以肯定它比我所知道的其它算法都要快。接下来就要说缺点了,这个算法有两个致命的缺点:首先,这种算法应该很难对浮点数进行排序【之所以用“应该很难”四字,是因为本人水平有限,不清楚浮点数的原理以及具体表示方法。顺带说一句,虽然没有经过实际代码验证,但我目测思考了下,它可以对所有整数有效,包括负数】;其次,既然此算法的特点是用空间换时间,那么程序运行时所剩的剩余空间就很可能决定这种算法的生死,在本文源代码中,range限定在了10000以内,如果把range定义为一百万、一千万甚至一个亿呢?PS本人没有精确的测试,但当我把range调成1000000时,程序就无法运行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值