Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定区间内的整数排序_Algorithm - Fatal编程技术网

Algorithm 给定区间内的整数排序

Algorithm 给定区间内的整数排序,algorithm,Algorithm,在区间[0,n^c]中有n个整数,其中c是某个正整数 我可以使用哪种算法在线性时间内对这些整数进行排序 我的问题是:给定时间间隔,最长的数字最多有cnlogn个数字,所以RadixSort不会在Onlogn时间内运行吗?使用基数排序。您可能会说它不够有效,因为位数是logn^c,所以总时间复杂度只有logn。但是,您不必以10为基数进行排序!您可能可以在恒定时间内将数字转换为基数n,这取决于n,基数排序取决于n,因为log_nn^c=c。我相信您要找的是基数排序。@Coldspeed的可能重复:

在区间[0,n^c]中有n个整数,其中c是某个正整数

我可以使用哪种算法在线性时间内对这些整数进行排序


我的问题是:给定时间间隔,最长的数字最多有cnlogn个数字,所以RadixSort不会在Onlogn时间内运行吗?

使用基数排序。您可能会说它不够有效,因为位数是logn^c,所以总时间复杂度只有logn。但是,您不必以10为基数进行排序!您可能可以在恒定时间内将数字转换为基数n,这取决于n,基数排序取决于n,因为log_nn^c=c。

我相信您要找的是基数排序。@Coldspeed的可能重复:我确实看过基数排序。但如果我正确理解基数排序,我需要m个桶,其中m是最长整数的位数。给定我的时间间隔,最长的数字最多有以10为基数的c*logn个数字。radixSort的运行时不会是Onlogn而不是On,因为这些数字的长度是c*nlogn???我想你是对的。要将其中一个整数转换为基数n,我最多需要c运算。所以我可以把所有的n个整数转换成c*n=线性时间。此外,数字的长度始终以c为界。