/*
============================================================================
Name : BucketSort.c
Author : Kontrol
Version :
Copyright : This is Kontrol's project
Description : BucketSort
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define MAX 100
typedef struct _BucketNode
{
float data;
struct _BucketNode * next;
}BucketNode;
int main(void) {
printf("please input the scale of question:");
int length = 0;
scanf("%d", &length);
float *a = (float *)malloc(length * sizeof(float));
int i=0;
for(;i<length;i++)
{
a[i] = (float)(rand()%MAX)/MAX;
}
BucketNode* b = (BucketNode*)malloc(length * sizeof(struct _BucketNode));
memset((void*)b, 0, length * sizeof(BucketNode));
int index = 0;
BucketNode * p;
BucketNode * q;
for(i=0;i<length;i++)
{
index = a[i] * length;
BucketNode* temp = (BucketNode*)malloc(sizeof(struct _BucketNode));
temp->data = a[i];
q = b + index;
p = b[index].next;
while(p)
{
if(p && p->data < a[i])
{
q=p;
p = p->next;
}
else break;
}
q->next = temp;
temp->next = p;
}
i=0;
int j = 0 ;
while(i<length)
{
q = b[i].next;
while(q)
{
a[j] = q->data;
printf("%.2f ", a[j]);
j++;
q = q->next;
}
i++;
}
return 0;
}
所犯错误:
1、开始的时候是定义BucketNode temp,这样其实会导致temp在for循环后会被消除掉,所以就一直不能创建好b[],并且还会造成死循环。正确的是应该使用malloc分配内存,这样的话该节点才不会被清除掉。
2、最后一个循环使用的时候搞不清楚到底i、j是数据的下标呢还是桶的下标了~~~~