基数排序

#ifndef _LINK_QUEUE_H_

#define _LINK_QUEUE_H_



typedef int elem_type;



typedef struct _NODE

{

	elem_type data;

	struct _NODE *next;

}NODE;

typedef struct _LINK_QUEUE

{

	NODE *head;

	NODE *tail;

}LINK_QUEUE;



bool InitLinkQueue(LINK_QUEUE *p);



bool DestroyLinkQueue(LINK_QUEUE *p);



bool IsEmpty(LINK_QUEUE *p);



bool PUSH(LINK_QUEUE *p,elem_type e);



bool POP(LINK_QUEUE *p,elem_type *e);



int GetLength(LINK_QUEUE *p);



void Display(LINK_QUEUE *p);

#endif
#include "LINKQUEUE.h"

#include<stdio.h>

#include<stdlib.h>

#include<assert.h>



bool InitLinkQueue(LINK_QUEUE *p)

{

	if(p == NULL)

	{

		return false;

	}

	p->head = NULL;

	p->tail = NULL;

	return true;

}



void InitLinkQueue(LINK_QUEUE **p)

{

	LINK_QUEUE *tmp = (LINK_QUEUE *)malloc(sizeof(LINK_QUEUE)*1);

	assert(tmp != NULL);

	tmp->head = NULL;

	tmp->tail = NULL;

	*p = tmp;

}



bool DestroyLinkQueue(LINK_QUEUE *p)

{

	if(p == NULL)

	{

		return false;

	}

	elem_type e;

	int n = GetLength(p);

	for(int i=1;i<=n;i++)

	{

		POP(p,&e);

	}

	return true;

}



bool IsEmpty(LINK_QUEUE *p)

{

	assert(p != NULL);

	return p->head == NULL;

}



bool PUSH(LINK_QUEUE *p,elem_type e)

{

	if(p == NULL)

	{

		return false;

	}

	NODE *tmp = (NODE *)malloc(sizeof(NODE)*1);

	assert(tmp != NULL);

	tmp->data = e;

	tmp->next = NULL;

	if(p->head == NULL)

	{

		p->head = tmp;

		p->tail = tmp;

	}

	else

	{

		p->tail->next = tmp;

		p->tail = tmp;

	}

	return true;

}



bool POP(LINK_QUEUE *p,elem_type *e)

{

	if(p == NULL)

	{

		return false;

	}

	if(IsEmpty(p))

	{

		return false;

	}

	NODE *tmp = p->head;

	*e = tmp->data;

	p->head = tmp->next;

	free(tmp);

	return true;

}



int GetLength(LINK_QUEUE *p)

{

	assert(p != NULL);

	NODE *tmp = p->head;

	int count = 0;

	while(tmp != NULL)

	{

		count++;

		tmp = tmp->next;

	}

	return count;

}

void Display(LINK_QUEUE *p)

{

	if(p == NULL)

	{

		return ;

	}

	NODE *tmp = p->head; 

	int n = GetLength(p);

	for(int i=1;i<=n;i++)

	{

		printf("%d ",tmp->data);

		tmp = tmp->next;

	}

	printf("\n");

}

main

#include"LQ.cpp"
#include"c++.h"
void radixt_sort(int *arr, int len, int n)

{

	int rex;

	int m = 1;

	int j;

	LINK_QUEUE queue[10];

	for(int i=0;i<10;i++)

	{

		InitLinkQueue(&queue[i]);

	}

	for(int i=0;i<n;i++)

	{

		for(int k=0;k<len;k++)

		{

			rex = (arr[k]/m)%10;

			PUSH(&queue[rex],arr[k]);

		}

		j = 0;

		for(int r=0;r<10;r++)

		{

			while(!IsEmpty(&queue[r]))

			{

				POP(&queue[r],&arr[j]);

				j++;

			}

		}

		m *= 10;

	}

	for(int i=0;i<10;i++)

	{

		DestroyLinkQueue(&queue[i]);

	}

}



void radix_sort(int *arr, int len)

{

	int max = arr[0];

	int n = 0;

	for(int i=1;i<len;i++)

	{

		if(arr[i] > max)

		{

			max = arr[i];

		}

	}

	while(max != 0)

	{

		max /= 10;

		n++;

	}

	radixt_sort(arr,len,n);

}
int main()
{
int x[10]={11,13,21,6,7,8,1};
 radix_sort(x,10);
for(int i=0;i<10;i++)
cout<<x[i]<<" ";
 
return 0;
}


你可能感兴趣的:(小代码)