基数排序(RADIX SORT
2017-04-20 16:45
337 查看
#include <stdio.h>
#include <stdlib.h>
#define N 3
typedef struct bucket_tag bucket;
typedef struct bucket_tag
{
bucket *next;
int value;
}*pbucket;
int fpow(int n, int k)
{
int i;
int ppow = 1;
for (i = 0; i < k; i++)
ppow *= n;
return ppow;
}
pbucket *CreateBucket(void) // create 10 bucekts
{
pbucket *root = (pbucket *)malloc(10 * sizeof(pbucket));
int i;
for (i = 0; i < 10; i++)
root[i] = (pbucket)malloc(sizeof(bucket));
for (i = 0; i < 10; i++)
{
root[i]->next = NULL;
root[i]->value = i;
}
root[9]->next = NULL;
root[9]->value = 9;
return root;
}
void AddNode(pbucket root, int num_value)
{
pbucket pnode = root;
while (pnode->next != NULL)
{
pnode = pnode->next;
}
pnode->next = (pbucket)malloc(sizeof(bucket));
pnode->next->value = num_value;
pnode->next->next = NULL;
}
void DeleteNode(pbucket previous, pbucket current)
{
previous->next = current->next;
free(current);
}
void BucketSort(int a[], int num) // the main drive programme
{
pbucket *radix = CreateBucket();
// the buckets
pbucket pnode;
int i, j, k;
int roundnum;
for (i = 1; i <= N; i++)
{
for (j = 0; j < num; j++)
{
roundnum = ((a[j] / fpow(10, i - 1)) % 10);
AddNode(radix[roundnum], a[j]);
}
k = 0;
for (j = 0; j < 10; j++)
{
while (radix[j]->next != NULL)
{
pnode = radix[j]->next;
a[k] = pnode->value;
DeleteNode(radix[j], pnode);
k = k + 1;
}
}
}
}
基数排序,桶式排序。在一定数据范围内,算法复杂度仅仅为 O(n)。
#include <stdlib.h>
#define N 3
typedef struct bucket_tag bucket;
typedef struct bucket_tag
{
bucket *next;
int value;
}*pbucket;
int fpow(int n, int k)
{
int i;
int ppow = 1;
for (i = 0; i < k; i++)
ppow *= n;
return ppow;
}
pbucket *CreateBucket(void) // create 10 bucekts
{
pbucket *root = (pbucket *)malloc(10 * sizeof(pbucket));
int i;
for (i = 0; i < 10; i++)
root[i] = (pbucket)malloc(sizeof(bucket));
for (i = 0; i < 10; i++)
{
root[i]->next = NULL;
root[i]->value = i;
}
root[9]->next = NULL;
root[9]->value = 9;
return root;
}
void AddNode(pbucket root, int num_value)
{
pbucket pnode = root;
while (pnode->next != NULL)
{
pnode = pnode->next;
}
pnode->next = (pbucket)malloc(sizeof(bucket));
pnode->next->value = num_value;
pnode->next->next = NULL;
}
void DeleteNode(pbucket previous, pbucket current)
{
previous->next = current->next;
free(current);
}
void BucketSort(int a[], int num) // the main drive programme
{
pbucket *radix = CreateBucket();
// the buckets
pbucket pnode;
int i, j, k;
int roundnum;
for (i = 1; i <= N; i++)
{
for (j = 0; j < num; j++)
{
roundnum = ((a[j] / fpow(10, i - 1)) % 10);
AddNode(radix[roundnum], a[j]);
}
k = 0;
for (j = 0; j < 10; j++)
{
while (radix[j]->next != NULL)
{
pnode = radix[j]->next;
a[k] = pnode->value;
DeleteNode(radix[j], pnode);
k = k + 1;
}
}
}
}
基数排序,桶式排序。在一定数据范围内,算法复杂度仅仅为 O(n)。
相关文章推荐
- 排序算法系列:基数排序(Radix sort)(C语言)
- 学习算法-基数排序(radix sort)卡片分类(card sort) C++数组实现
- 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
- 算法导论 第八章基数排序(radix sort)
- 基数排序(Radix Sort)的代码实现
- 基数排序(RadixSortC语言)
- 基数排序(Radix Sort)----(排序算法十四)
- 排序算法-基数排序(RadixSort)
- 算法导论 第八章基数排序(radix sort)
- 基数排序(radix sort)
- 基数排序的两种实现方法--Radix Sort
- 基数排序(Radix Sort)----(排序算法十四)
- 基数排序(RadixSort)思想与实现
- 算法总结系列之五: 基数排序(Radix Sort)
- RadixSort (基数排序)
- 【CLRS】《算法导论》读书笔记(三):计数排序(Counting sort)、基数排序(Radix sort)和桶排序(Bucket sort)
- 基数排序(Radix Sort)
- 基数排序_RADIXSORT
- 算法总结系列之五: 基数排序(Radix Sort)
- 基数排序(radix sort)