我写了一个简单的程序,按O(n)排序。它的内存效率非常低,但这不是重点。
它使用HashMap背后的原理进行排序:
public class NLogNBreak {
public static class LinkedListBack {
public LinkedListBack(int val){
first = new Node();
first.val = val;
}
public Node first = null;
public void insert(int
我正在尝试使用基数排序来对无序整数列表进行排序,包括正整数和负整数。我有能力对正数列表进行排序,但我对如何对负数使用基数排序感到困惑。我想知道是否有人可以帮助我编码和解释一下基数排序是如何处理负数的。经过一些谷歌搜索,我知道你必须把负号当作一个特殊的字符,但我仍然在困惑的列车上。下面你可以看到我目前的基数排序实现,取自。
def radix_sort(random_list):
len_random_list = len(random_list)
modulus = 10
div = 1
while True:
# empty array, [[] for i in range(10)
我想用基数对浮标进行排序。下面是我的代码。但是,我的输出是不正确的。例如,如果我使用3.1、-5和1运行代码,那么排序后的值将被打印为3.000000、-5.000000和1.000000。
我知道如何正确地将浮点数转换为int返回到浮点数,我需要应用以下逻辑,但我不知道如何将其集成到rfloat()中,因为我尝试并得到了许多错误。
如何才能正确地将按位基排序应用于浮动?
float x = 3.1, *y;
int *a;
a = (int *)&x;
y = (float *)a;
printf("%f",*y);
我想出了以下方法,但可以预见它不会起作用。
var t = new Array(a.length);
var r = 4;
var b = 64;
var count = new Array(1<<r);
var pref = new Array(1<<r);
var groups = Math.ceil(b / r);
var mask = (1 << r) - 1;
var shift = 0;
for(var c = 0; c < groups; c++)
{
shift += r;
for(var j = 0; j &
我必须以两种方式对汽车牌照(ABC 123)进行基数排序: 1)数组2)链表。最有趣的是排序必须在文件中完成。例如,从现在开始,我们将只讨论数组。我生成车号并将其放入数组中,然后使用二进制写入将所有生成的汽车车牌写入该文件。之后,我将新生成的文件交给Radix Sort,他需要进行魔术操作。我将展示我目前的代码,但它实际上不是‘真正的’基数排序,因为我的大脑无法理解如何在文件中实现基数排序。(我已经实现了普通数组和链表的基数排序,但是当它在一个文件中完成时,它是令人兴奋的)。我只是想问你们是否有任何关于我如何改进排序算法的提示或想法,因为它非常慢。谢谢。
PROGRAM.CS
public s
我必须按升序对数组中的数字进行排序,并且我的时间复杂度必须为O(n)。我使用基数排序,但速度不够快。有什么想法可以让我的代码更快吗?这就是它:
void radix(int *a, int n) {
int i;
int sorted[n];
int number = 1;
int biggestNumber = -1;
for(i = 0; i < n; i++){
if(a[i] > biggestNumber)
biggestNumber = a[i]; }
while (biggestNumber / n
好的,我必须为无符号整数和浮点数创建一个基数排序。我的无符号整数版本可以正常工作,但我在处理浮点值时遇到了一些问题。基本上,它按照浮点数的整数值对数组的值进行排序,但不会基于小数值对其进行排序。(例如36.65234将出现在36.02311之前,如果它出现在未排序的数组中)这段代码是我进行位操作和掩码的地方,我非常确定这就是我的问题所在。
/* For loop to create bin */
for(int i=0; i<n; i++){
temp_int = (((unsigned int)(list[i]))>>bitwise)&0xff;
b
我正在使用这个作为参考,看看算法是如何实现的。除本部分外,我大部分理解:
/*
* update all the buckets. If bucket[8] has 2,
* then there are 2 elements present till bucket 8
*/
for (i = 1; i < 10; i++)
bucket[i] = bucket[i] + bucket[i-1];
我不明白作者在那个循环中做了什么。有人能解释一下发生了什么事吗?
是的,我正在用纸和笔来观察到底发生了什么。我只是想澄清一下
在c++语言中,为了获得O(n+m)的最佳时间复杂度,将两个未排序的数组排序到一个排序的数组中。我们如何修改这段代码,使其时间复杂度为O(m+n)?两个数组的大小应该不同。这里的时间复杂度为O((m+n)log(m+n))。如何使其复杂度达到O(m+n)?
#include <bits/stdc++.h>
using namespace std;
// Function to merge array in sorted order
void sortedMerge(int a[], int b[], int res[],
假设我写了一个非常棒的接口。事实上,我想要一些我用来实现它们的内置类型,这样我写的任何使用这个接口的代码也可以使用内置类型。
public interface IKickAss
{
int Yeahhhhhhh() { get; }
}
public static class Woot
{
public int Bar(IKickAss a, IKickAss b)
{
return a.Yeahhhhhhh - b.Yeahhhhhhh;
}
}
// What I'd like to do, sort of.
public par
我终于实现了基于十进制的基数排序,但我想将其转换为按位排序。
void LSD_radixSort (unsigned int * A, int size, int r)
{
// Find the maximum number to know number of digits
int m = getMax(A, size);
// Do counting sort for every digit. Note that instead of passing digit
// number, exp is passed. exp is 10^i wher