本文概述
- 复杂
- 例
- 算法
- C程序
- Java程序
- C#程序
在第二遍中, 根据第二个字母的升序对名称进行分组。继续相同的过程, 直到找到名称的排序列表。存储桶用于存储每次通过时产生的名称。通过次数取决于带有最大字母的姓名的长度。
对于整数, 基数排序会根据数字对数字进行排序。在从LSB到MSB的数字位数之间进行比较。通过的次数取决于位数最多的号码的长度。
复杂
复杂 | 最好的情况 | 平均情况 | 最差的情况 |
---|---|---|---|
Time Complexity | Ω(n + k) | θ(nk) | O(nk) |
Space Complexity | O(n + k) |
A = {10, 2, 901, 803, 1024}
传递1 :(按0位置的数字排序列表)
10, 901, 2, 803, 1024.
第二遍:(按10位数字对列表进行排序)
02, 10, 901, 803, 1024
第三遍:(按100位数字对列表进行排序)
02, 10, 1024, 803, 901.
【基数排序算法实现】第4遍:(按1000位数字对列表进行排序)
02, 10, 803, 901, 1024
因此, 在步骤4中生成的列表是按基数排序排列的排序列表。
算法
- 第1步:将ARR中的最大数字查找为LARGE
- 步骤2:[INITIALIZE] SET NOP =大位数
- 步骤3:SET PASS = 0
- 步骤4:在PASS < = NOP-1时重复步骤5
- 步骤5:SET I = 0并初始化值区
- 步骤6:在我重覆步骤7至9
- 第7步:在A [I]中的第PASS位设置数字位=数字
- 步骤8:将A [I]添加到编号为DIGIT的存储桶中
- 第9步:编号为DIGIT的存储桶的增量存储桶计数[LOOP结束]
- 第10步:在存储桶中收集数字[结束循环]
- 步骤11:结束
#include <
stdio.h>
int largest(int a[]);
void radix_sort(int a[]);
void main(){ int i;
int a[10]={90, 23, 101, 45, 65, 23, 67, 89, 34, 23};
radix_sort(a);
printf("\n The sorted array is: \n");
for(i=0;
i<
10;
i++)printf(" %d\t", a[i]);
}int largest(int a[]){ int larger=a[0], i;
for(i=1;
i<
10;
i++) {if(a[i]>
larger)larger = a[i];
} return larger;
}void radix_sort(int a[]){ int bucket[10][10], bucket_count[10];
int i, j, k, remainder, NOP=0, divisor=1, larger, pass;
larger = largest(a);
while(larger>
0) {NOP++;
larger/=10;
} for(pass=0;
pass<
NOP;
pass++) // Initialize the buckets {for(i=0;
i<
10;
i++)bucket_count[i]=0;
for(i=0;
i<
10;
i++){// sort the numbers according to the digit at passth placeremainder = (a[i]/divisor)%10;
bucket[remainder][bucket_count[remainder]] = a[i];
bucket_count[remainder] += 1;
}// collect the numbers after PASS passi=0;
for(k=0;
k<
10;
k++){for(j=0;
j<
bucket_count[k];
j++){a[i] = bucket[k][j];
i++;
}}divisor *= 10;
}}
输出:
The sorted array is:232323344565678990101
Java程序
public class Radix_Sort {public static void main(String[] args) {int i;
Scanner sc = new Scanner(System.in);
int[] a = {90, 23, 101, 45, 65, 23, 67, 89, 34, 23};
radix_sort(a);
System.out.println("\n The sorted array is: \n");
for(i=0;
i<
10;
i++)System.out.println(a[i]);
} static int largest(inta[]) { int larger=a[0], i;
for(i=1;
i<
10;
i++){if(a[i]>
larger)larger = a[i];
}returnlarger;
} static void radix_sort(inta[]) {int bucket[][]=newint[10][10];
int bucket_count[]=newint[10];
int i, j, k, remainder, NOP=0, divisor=1, larger, pass;
larger = largest(a);
while(larger>
0){NOP++;
larger/=10;
}for(pass=0;
pass<
NOP;
pass++) // Initialize the buckets{for(i=0;
i<
10;
i++)bucket_count[i]=0;
for(i=0;
i<
10;
i++){// sort the numbers according to the digit at passth placeremainder = (a[i]/divisor)%10;
bucket[remainder][bucket_count[remainder]] = a[i];
bucket_count[remainder] += 1;
}// collect the numbers after PASS passi=0;
for(k=0;
k<
10;
k++){for(j=0;
j<
bucket_count[k];
j++){a[i] = bucket[k][j];
i++;
}}divisor *= 10;
} }}
输出:
The sorted array is:232323344565678990101
C#程序
using System;
public class Radix_Sort {public static void Main() {int i;
int[] a = {90, 23, 101, 45, 65, 23, 67, 89, 34, 23};
radix_sort(a);
Console.WriteLine("\n The sorted array is: \n");
for(i=0;
i<
10;
i++)Console.WriteLine(a[i]);
} static int largest(int[] a) { int larger=a[0], i;
for(i=1;
i<
10;
i++){if(a[i]>
larger)larger = a[i];
}return larger;
} static void radix_sort(int[] a) {int[, ] bucket=new int[10, 10];
int[] bucket_count=new int[10];
int i, j, k, remainder, NOP=0, divisor=1, larger, pass;
larger = largest(a);
while(larger>
0){NOP++;
larger/=10;
}for(pass=0;
pass<
NOP;
pass++) // Initialize the buckets{for(i=0;
i<
10;
i++)bucket_count[i]=0;
for(i=0;
i<
10;
i++){// sort the numbers according to the digit at passth placeremainder = (a[i]/divisor)%10;
bucket[remainder, bucket_count[remainder]] = a[i];
bucket_count[remainder] += 1;
}// collect the numbers after PASS passi=0;
for(k=0;
k<
10;
k++){for(j=0;
j<
bucket_count[k];
j++){a[i] = bucket[k, j];
i++;
}}divisor *= 10;
} }}
输出:
The sorted array is:232323344565678990101
推荐阅读
- 选择排序算法实现
- 快速排序算法实现
- 归并排序算法实现
- 队列的链表实现
- 线性搜索算法
- Android打造随意层级树形控件考验你的数据结构和设计
- 插入排序算法实现
- 堆排序算法实现
- 图论(图Graph的表示方法)