基数排序,分别用汇编语言,C语言,C++,java,python编写出来

基数排序比较特殊,特殊在它只能用在整数(自然数)排序,而且不是基于比较的,其原理是将整数按照位分成不同的数字,按照每个数各位值逐步排序。何为高位,比如 81,1 就是低位, 8 就是高位。 分为高位优先和低位优先,先比较高位就是高位优先,先比较低位就是低位优先。下面我们讲高位优先。
主要的步骤如下:
  • 将所有元素统一称为统一数位长度,前面补 0。
  • 从最高位开始,依次排序,从最高位到最低位遍历完,数组就是有序的。

基数排序,分别用汇编语言,C语言,C++,java,python编写出来
以下是使用汇编语言、C语言、C++、Java和Python编写的基数排序算法示例代码:
1.汇编语言(x86)代码示例:

assembly
section .data
arr dd 170, 45, 75, 90, 802, 24, 2, 66
n equ $-arr
temp dd 0
section .text
global _start
_start:
mov ecx, n
dec ecx
mov ebx, 1
outer_loop:
xor eax, eax
mov edx, 10
inner_loop:
mov esi, eax
div edx
mov eax, edx
xor edx, edx
mov edx, esi
cmp edx, ecx
jbe skip_swap
mov esi, [arr + edx * 4]
mov edi, [arr + eax * 4]
cmp esi, edi
jae skip_swap
mov [arr + edx * 4], edi
mov [arr + eax * 4], esi
skip_swap:

SVIP价 5 折 永久SVIP免费

已有0人支付

2.C语言代码示例:

#include <stdio.h>
void countSort(int arr[], int n, int exp) {
int output[n];
int count[10] = {0};
for (int i = 0; i < n; i++) {
count[(arr[i] / exp) % 10]++;
}
for (int i = 1; i < 10; i++) {
count[i] += count[i – 1];
}
for (int i = n – 1; i >= 0; i–) {
output[count[(arr[i] / exp) % 10] – 1] = arr[i];
count[(arr[i] / exp) % 10]–;
}
for (int i = 0; i < n; i++) {
arr[i] = output[i];
}
}
void radixSort(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
for (int exp = 1; max / exp > 0; exp *= 10) {
countSort(arr, n, exp);
}
}

SVIP价 5 折 永久SVIP免费

已有0人支付

3.C++代码示例:

#include <iostream>
using namespace std;
void countSort(int arr[], int n, int exp) {
int output[n];
int count[10] = {0};
for (int i = 0; i < n; i++) {
count[(arr[i] / exp) % 10]++;
}
for (int i = 1; i < 10; i++) {
count[i] += count[i – 1];
}
for (int i = n – 1; i >= 0; i–) {
output[count[(arr[i] / exp) % 10] – 1] = arr[i];
count[(arr[i] / exp) % 10]–;
}
for (int i = 0; i < n; i++) {
arr[i] = output[i];
}
}
void radixSort(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
for (int exp = 1; max / exp > 0; exp *= 10) {
countSort(arr, n, exp);
}
}

SVIP价 5 折 永久SVIP免费

已有0人支付

4.Java代码示例:

import java.util.Arrays;
public class RadixSort {
public static void radixSort(int[] arr) {
int max = Arrays.stream(arr).max().getAsInt();
for (int exp = 1; max / exp > 0; exp *= 10) {
countSort(arr, exp);
}
}
public static void countSort(int[] arr, int exp) {
int n = arr.length;
int[] output = new int[n];
int[] count = new int[10];
Arrays.fill(count, 0);
for (int i = 0; i < n; i++) {
count[(arr[i] / exp) % 10]++;
}
for (int i = 1; i < 10; i++) {
count[i] += count[i – 1];
}
for (int i = n – 1; i >= 0; i–) {
output[count[(arr[i] / exp) % 10] – 1] = arr[i];
count[(arr[i] / exp) % 10]–;
}
for (int i = 0; i < n; i++) {
arr[i] = output[i];
}
}

}

SVIP价 5 折 永久SVIP免费

已有0人支付

5.Python代码示例:

def radixSort(arr):
max_num = max(arr)
exp = 1
while max_num // exp > 0:
countSort(arr, exp)
exp *= 10
def countSort(arr, exp):
n = len(arr)
output = [0] * n
count = [0] * 10
for i in range(n):
index = (arr[i] // exp) % 10
count[index] += 1
for i in range(1, 10):
count[i] += count[i – 1]
for i in range(n – 1, -1, -1):
index = (arr[i] // exp) % 10
output[count[index] – 1] = arr[i]
count[index] -= 1
for i in range(n):
arr[i] = output[i]

SVIP价 5 折 永久SVIP免费

已有0人支付

这些示例代码演示了基数排序算法的实现。您可以根据需要使用这些代码,并根据实际情况进行调整。


扫码关注微信公众号,免费查看完整算法内容。

 

下载说明:
1.本站资源都是白菜价出售,同样的东西,我们不卖几百,也不卖几十,甚至才卖几块钱,一个永久会员能下载全站100%源码了,所以单独购买也好,会员也好均不提供相关技术服务。
2.如果源码下载地址失效请联系站长QQ进行补发。
3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!
4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,由于源码具有复制性,一经售出,概不退换。用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【188资源网】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。
5.请您认真阅读上述内容,购买即以为着您同意上述内容。
188资源网 » 基数排序,分别用汇编语言,C语言,C++,java,python编写出来

提供最优质的资源集合

立即查看 了解详情