//桶式排序bucket sort
//radix sort较小的数作为基数,采取多趟桶式排序的方法。具体做法是最低有效位优先,将各数放入痛中;然后调整,依次类推到最高有效位。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define BUKETSIZE 10
typedef struct listitem
{
int _value;
struct listitem* _next;
};
struct listitem bucket[BUKETSIZE];
void reverse(char s[])
{
int c,i,j;
for(i=0,j=strlen(s)-1;i<j;i++,j--)
{
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
void itoa(int n,char s[])
{
int i=0;
do{
s[i++]=abs(n%10)+'0';
}while(n/=10);
s[i]='\0';
reverse(s);
}
int num_of_index(int n,int index)
{
char s[20];
itoa(n,s);
int num=strlen(s)-index;
if(num<0) return 0;
char x=s[num];
int y=x-'0';
return y;
}
void bucket_insert(int a[],int size,int index)
{
int i;
for(i=0;i<size;i++)
{
bucket[i]._value=0;
bucket[i]._next=NULL;
}
for(i=0;i<size;i++)
{
//将按照index位数字的大小放置进bucket中
int position=num_of_index(a[i],index);
struct listitem *newlistitem=&bucket[position];
while(newlistitem->_next !=NULL&&newlistitem->_next->_value<=a[i])
{
newlistitem=newlistitem->_next;
}
struct listitem *newadd=malloc(sizeof(struct listitem));
newadd->_value=a[i];
newadd->_next=newlistitem->_next;
newlistitem->_next=newadd;
}
}
void bucket_clear()
{
int i;
struct listitem *p;
for(i=0;i<BUKETSIZE;i++)
{
p=bucket[i]._next;
while(p!=NULL)
{
struct listitem *del=p;
p=p->_next;
free(del);
}
bucket[i]._value=0;
bucket[i]._next=NULL;
}
}
void bucket_ouput(int to[],int size)
{
int i,j=0;
struct listitem *p;
for(i=0;i<BUKETSIZE;i++)
{
p=bucket[i]._next;
while(p!=NULL)
{
to[j++]=p->_value;
printf("%d ",p->_value);
p=p->_next;
}
printf("\n");
}
}
void radix_sort(int a[],int size)
{
int i=0;
int maxsize=0;
int tempsize;
char n[10];
for(i=0;i<size;i++)
{
itoa(a[i],n);
tempsize=strlen(n);
if(tempsize>maxsize) maxsize=tempsize;
}
for(i=0;i<maxsize;i++)
{
bucket_insert(a,size,i+1);
bucket_ouput(a,size);
bucket_clear();
}
}
int main()
{
int a[6]={1,243,45,65,43,23};
radix_sort(a,6);
printf("\n");
int i;
for(i=0;i<6;i++)
printf(" %d ",a[i]);
printf("\n");
return 0;
}
分享到:
相关推荐
### Radix Sort (基数排序) 排序算法详解 #### 一、算法介绍与应用场景 基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达...
Java基数排序Radix Sort是一种高效的稳定性排序算法, thuộc於“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort。顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些...
桶排序(Bucket Sort) 环形排序(Circle Sort) 鸡尾酒排序(Cocktail Shaker Sort) 梳排序(Comb Sort) 计数排序(Counting Sort) 循环排序(Cycle Sort) 双重排序(Double Sort) 荷兰国旗排序(Dutch ...
经典排序算法 - 桶排序Bucket sort 经典排序算法 - 插入排序Insertion sort 经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonhole sort 经典排序算法 - 归并排序Merge sort 经典排序算法 - ...
7. **计数排序(Counting Sort)、桶排序(Bucket Sort)、基数排序(Radix Sort)**:这些是针对特定类型数据(如非负整数)的排序算法,可以在一定条件下达到线性时间复杂度。 "sort1.m"的实现可能考虑了算法效率...
1. 冒泡排序(Bubble Sort) public static void bubbleSort(int[] arr) { ...8. 桶排序(Bucket Sort) 9. 基数排序(Radix Sort) 10. 希尔排序(Shell Sort) 解压密码 douge
基数排序(Radix sort)是一种非比较型整数排序算法,它的基本思想是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种排序方式特别适合处理大数据量且数据范围较小的情况。在C#中,我们可以使用以下方法...
_算法清单 :keyboard: 语演算法集会 C ++ Binary Insertion Sort Bucket Sort Cycle Sort K Way Merge Sort Radix Sort Tree Sort PigeonholeSort Tree Sort C Bubble Sort Insertion Sort Merge Sort Quick Sort ...
8. **桶排序(Bucket Sort)**: 桶排序是将待排序的元素分布到有限数量的桶里,每个桶再分别排序。它适用于数据分布均匀的情况,时间复杂度可达到线性O(n + k)。 9. **基数排序(Radix Sort)**: 基数排序是...
桶排序(Bucket Sort) 基数排序(Radix Sort) 搜索算法 线性搜索(Linear Search) 二分搜索(Binary Search) 深度优先搜索(Depth-First Search) 广度优先搜索(Breadth-First Search) 广度优先搜索(Breadth-...
9. 基数排序(Radix Sort):根据数字位数进行排序,从低位到高位逐位排序,适用于整数或字符串排序。 这些排序算法各有优缺点,适用于不同的场景。理解并掌握它们,不仅可以提升编程能力,也有助于在实际问题中...
在给出的示例中,BucketSort函数就是用来进行桶排序的。这个函数接受一个数据数组,数组大小,最大位数,以及当前处理的位数y。它利用链表作为桶的数据结构,存储每个桶中的元素。在分配阶段,根据当前位的值将数据...
基数排序的核心在于桶排序(Bucket Sort)的运用,桶排序是一种分布式排序算法,它将待排序的元素分布到若干个“桶”中,每个桶再分别单独进行排序,最后按照桶的顺序依次取出元素,完成排序。在基数排序中,这个...
- **桶排序(Bucket Sort)**:当输入数据服从均匀分布时,将数据分配到多个桶中,每个桶再分别排序。 - **基数排序(Radix Sort)**:根据元素的每一位进行排序,从低位到高位依次进行。 每种排序算法都有其适用场景...
9. **桶排序**(Bucket Sort):桶排序是将待排序的元素分布到有限数量的桶里,每个桶再分别排序,最后将所有桶中的元素按顺序合并。 10. **基数排序**(Radix Sort):基数排序是按照低位先排序,然后收集;再按照...
8. **桶排序**(Bucket Sort):假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序。时间复杂度可以达到线性,即O(n),但需要额外空间,空间复杂度与桶的数量有关。 9. **基数排序**(Radix ...
冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)归并排序(Merge Sort)快速排序(Quick Sort)堆排序(Heap Sort)希尔排序(Shell Sort)计数排序(Counting Sort)桶排序(Bucket ...
9. **桶排序**(Bucket Sort):桶排序是另一种非比较型排序,将待排序元素分到有限数量的桶里,每个桶再单独排序,最后合并所有桶的排序结果。 10. **基数排序**(Radix Sort):基数排序按照元素的位数进行多轮...
7. 计数排序(Counting Sort)、桶排序(Bucket Sort)和基数排序(Radix Sort): 这些是非比较型排序算法,适用于特定类型的输入数据。例如,计数排序适用于整数排序,桶排序适用于元素均匀分布的情况,基数排序则...