与 Python 的排序相比,我的基数排序函数输出排序但错误的列表:
My radix sort: ['aa', 'a', 'ab', 'abs', 'asd', 'avc', 'axy', 'abid']
Python's sort: ['a', 'aa', 'ab', 'abid', 'abs', 'asd', 'avc', 'axy']
Run Code Online (Sandbox Code Playgroud)
* 我的基数排序不做填充
* 它的机制是最低有效位 (LSB)
* 我需要利用每个单词的长度
以下是我的代码。
def count_sort_letters(array, size, col, base):
output = [0] * size
count = [0] * base
min_base = ord('a')
for item in array:
correct_index = min(len(item) - 1, col)
letter = ord(item[-(correct_index + 1)]) - min_base
count[letter] += 1
for i in range(base - 1):
count[i + 1] += …Run Code Online (Sandbox Code Playgroud) 我有一个 n 个整数的数组,它只能假设log n 个可能的值(和任何值)。例如,在 中S = [349,12,12,283,349,283,283,12],只有 3 个不同的数字(log 8 = 3)。
我必须在短时间内对这个数组进行排序O(nlogn)。我应该使用哪种算法?也许基数排序和计数排序?它的分析呢?
考虑一下代码:
a=runif(1000)
microbenchmark::microbenchmark(order(a,method="radix"))
microbenchmark::microbenchmark(sort.list(a,method="radix"))
Run Code Online (Sandbox Code Playgroud)
运行此代码,我看到的更好的性能order()相比sort.list().另一方面,如果我使用100000的样本大小,两个函数的性能几乎相同.
为什么会这样?
当我在 Visual Studio 15 中执行此代码时,它仅对 32 个元素进行排序。如果我将 WSIZE 设置为大于 32 或小于 32,它会显示与输出相同的未排序元素。谁能帮帮我吗?
我的系统信息。
处理器 - Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz、2400 Mhz、2 个核心、4 个逻辑处理器
内存 - 8GB
专用显卡 - NVIDIA GeForce 940M 4GB(384 个 CUDA 核心)
这是 WSIZE 设置为 32 的输出https://i.stack.imgur.com/mjgZI.jpg
这是 WSIZE 设置为 19 的输出https://i.stack.imgur.com/pXiG5.jpg
这是 WSIZE 设置为 50 的输出https://i.stack.imgur.com/8rPYo.jpg
#pragma once
#ifdef __INTELLISENSE__
void __syncthreads();
#endif
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <chrono>
using namespace std;
using namespace …Run Code Online (Sandbox Code Playgroud) 我可以使用一些帮助.你如何在python中编写一个实现基数排序的程序?
这是一些信息:
基数10整数的基数排序是基于排序打卡,但事实证明排序是非常有效的.该排序使用主箱和10位数箱.每个bin都像一个队列,并按照它们到达的顺序维护其值.算法首先将每个数字放在主bin中.然后它考虑每个值的个位数.删除第一个值并将其放置在与个位数对应的数字仓中.例如,534被放置在数字仓4中,662被放置在数字仓2中.一旦主仓中的所有值被放置在相应的数字仓中,则从仓0到仓9收集值(在该订单)并放回主箱.该过程继续以十位数,数百位等为基础.处理完最后一位数后 主bin按顺序包含值.使用随机找到的randint创建1到100000之间的随机整数.使用list comphrension创建不同大小的列表(10,100,1000,10000等).要使用索引来访问数字,首先将整数转换为字符串.要使此类工作,所有数字必须具有相同的位数.要使用前导零填充零填充整数,请使用字符串方法str.zfill().对主bin进行排序后,将字符串转换回整数.要使用前导零填充零填充整数,请使用字符串方法str.zfill().对主bin进行排序后,将字符串转换回整数.要使用前导零填充零填充整数,请使用字符串方法str.zfill().对主bin进行排序后,将字符串转换回整数.
我不知道如何开始这个,任何帮助表示赞赏.谢谢.