zoukankan      html  css  js  c++  java
  • 基数排序之多keyword排序运用队列

    源码例如以下:
    
    #include <stdlib.h>
    #include <stdio.h>
    
    typedef struct QUEUEnode* link;
    struct QUEUEnode{
    	int item ;
    	link next;
    	link head , tail;
    };
    
    link NEW(int item, link next){
    	link x = (link) malloc(sizeof *x);
    	x->item = item;
    	x->next = next;
    	return x;
    }
    
    void QUEUEinit(link queue, int maxN){
    	queue->head = NULL;
    }
    
    int QUEUEempty(link queue){
    	return queue->head == NULL;
    } 
    
    void  QUEUEput(link queue,int item){
    	if(queue->head == NULL){
    		queue->head =(queue->tail = NEW(item,queue->head)) ;
    		return;
    	}
    	queue->tail->next = NEW(item,queue->tail->next);
    	queue->tail = queue->tail->next;
    }
    
    int QUEUEget(link queue){
    	int item = queue->head->item;
    	link t = queue->head->next;
    	free(queue->head);
    	queue->head = t;
    	return item;
    } 
    //以上是QUEUE的ADT
    //求整数k的第p位 
    int radix(int k, int p){
    	int i,power = 1 ;
    	 for(i=1;i<=p-1;i++) power*=10;
    	 return (k%(power*10))/power;
    }
    
    void p(link A){
    	while(!QUEUEempty(A))
    		printf("%d ",QUEUEget(A));
    }
    void radixSort(int figure, link A){  //figure:待排序的数据最大位数  此方法仅仅适合数字排序
    	link Q[10]; int data, pass, i , r;
    	for(pass=1;pass<=figure;pass++){
    		for(i=0;i<=9;i++){
    			Q[i] = (link)malloc(sizeof *(Q[i]));
    			QUEUEinit(Q[i],40); //置空队列 
    		}
    		while(!QUEUEempty(A)){ 
    			data = QUEUEget(A);
    			r = radix(data,pass);
    			QUEUEput(Q[r],data); //分别往十个队列里分发数据
    		}
    		for(i=0;i<=9;i++)  //这里的操作还能够再优化
    			while(!QUEUEempty(Q[i]))
    				QUEUEput(A,QUEUEget(Q[i]));  //最后往目标队列回收各数位排好序的数据
    	}
    }
    main(){
    	int a[10] = {321,234,666,745,245,12,23,1,555,651};
    	link A = (link)malloc(sizeof*A);
    	QUEUEinit(A,10);
    	int i;
    	for(i=0;i<10;i++)QUEUEput(A,a[i]);
    	radixSort(3,A);
    	p(A);
    }
    
    
    

  • 相关阅读:
    Window.ActiveXObject的用法 以及如何判断浏览器的类型
    PDO预处理
    *p=&a是把a的值赋给p,p=&a是把a的地址赋给p。
    牛客网
    关于stable_sort()和sort()的区别
    求最小公倍数
    成绩排序
    二叉树的存储、创建以及遍历
    关于sort函数的几种用法
    vector的用法
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7111260.html
Copyright © 2011-2022 走看看