`
javayestome
  • 浏览: 1050870 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

radix sort &&bucket sort

阅读更多
//桶式排序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 (基数排序) 排序算法详解 #### 一、算法介绍与应用场景 基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达...

    Java基数排序radix sort原理及用法解析

    Java基数排序Radix Sort是一种高效的稳定性排序算法, thuộc於“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort。顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些...

    python 实现 排序 课程设计 代码

    桶排序(Bucket Sort) 环形排序(Circle Sort) 鸡尾酒排序(Cocktail Shaker Sort) 梳排序(Comb Sort) 计数排序(Counting Sort) 循环排序(Cycle Sort) 双重排序(Double Sort) 荷兰国旗排序(Dutch ...

    经典算法的C#源码实现

    经典排序算法 - 桶排序Bucket sort 经典排序算法 - 插入排序Insertion sort 经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonhole sort 经典排序算法 - 归并排序Merge sort 经典排序算法 - ...

    matlab开发-sort1m

    7. **计数排序(Counting Sort)、桶排序(Bucket Sort)、基数排序(Radix Sort)**:这些是针对特定类型数据(如非负整数)的排序算法,可以在一定条件下达到线性时间复杂度。 "sort1.m"的实现可能考虑了算法效率...

    常用的十种java排序算法实现

    1. 冒泡排序(Bubble Sort) public static void bubbleSort(int[] arr) { ...8. 桶排序(Bucket Sort) 9. 基数排序(Radix Sort) 10. 希尔排序(Shell Sort) 解压密码 douge

    c#基数排序Radix sort的实现方法

    基数排序(Radix sort)是一种非比较型整数排序算法,它的基本思想是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种排序方式特别适合处理大数据量且数据范围较小的情况。在C#中,我们可以使用以下方法...

    sorting-algorithms:专为开源初学者打造的适合初学者的存储库。 将任何语言的任何排序算法添加到此存储库

    _算法清单 :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 ...

    CSort内排序算法

    8. **桶排序(Bucket Sort)**: 桶排序是将待排序的元素分布到有限数量的桶里,每个桶再分别排序。它适用于数据分布均匀的情况,时间复杂度可达到线性O(n + k)。 9. **基数排序(Radix Sort)**: 基数排序是...

    算法编程题 排序、搜索、图论、动态规划

    桶排序(Bucket Sort) 基数排序(Radix Sort) 搜索算法 线性搜索(Linear Search) 二分搜索(Binary Search) 深度优先搜索(Depth-First Search) 广度优先搜索(Breadth-First Search) 广度优先搜索(Breadth-...

    Sort源代码

    9. 基数排序(Radix Sort):根据数字位数进行排序,从低位到高位逐位排序,适用于整数或字符串排序。 这些排序算法各有优缺点,适用于不同的场景。理解并掌握它们,不仅可以提升编程能力,也有助于在实际问题中...

    深入解析Radix Sort基数排序算法思想及C语言实现示例

    在给出的示例中,BucketSort函数就是用来进行桶排序的。这个函数接受一个数据数组,数组大小,最大位数,以及当前处理的位数y。它利用链表作为桶的数据结构,存储每个桶中的元素。在分配阶段,根据当前位的值将数据...

    DS_Radix-Bucket_Sort:基数排序是一种用于整数的线性排序算法,该算法使用按字母顺序对名称进行排序的概念

    基数排序的核心在于桶排序(Bucket Sort)的运用,桶排序是一种分布式排序算法,它将待排序的元素分布到若干个“桶”中,每个桶再分别单独进行排序,最后按照桶的顺序依次取出元素,完成排序。在基数排序中,这个...

    Sort_排序算法_

    - **桶排序(Bucket Sort)**:当输入数据服从均匀分布时,将数据分配到多个桶中,每个桶再分别排序。 - **基数排序(Radix Sort)**:根据元素的每一位进行排序,从低位到高位依次进行。 每种排序算法都有其适用场景...

    SortAlgorithm.rar

    9. **桶排序**(Bucket Sort):桶排序是将待排序的元素分布到有限数量的桶里,每个桶再分别排序,最后将所有桶中的元素按顺序合并。 10. **基数排序**(Radix Sort):基数排序是按照低位先排序,然后收集;再按照...

    sort_demo.rar_DEMO_排序比较

    8. **桶排序**(Bucket Sort):假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序。时间复杂度可以达到线性,即O(n),但需要额外空间,空间复杂度与桶的数量有关。 9. **基数排序**(Radix ...

    Java算法代码实现合集

    冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)归并排序(Merge Sort)快速排序(Quick Sort)堆排序(Heap Sort)希尔排序(Shell Sort)计数排序(Counting Sort)桶排序(Bucket ...

    sort-algorithms-java.tar.gz

    9. **桶排序**(Bucket Sort):桶排序是另一种非比较型排序,将待排序元素分到有限数量的桶里,每个桶再单独排序,最后合并所有桶的排序结果。 10. **基数排序**(Radix Sort):基数排序按照元素的位数进行多轮...

    Sort排序

    7. 计数排序(Counting Sort)、桶排序(Bucket Sort)和基数排序(Radix Sort): 这些是非比较型排序算法,适用于特定类型的输入数据。例如,计数排序适用于整数排序,桶排序适用于元素均匀分布的情况,基数排序则...

Global site tag (gtag.js) - Google Analytics