三九宝宝网宝宝教育教学论文

用C语言描述如何实现基数排序

12月27日 编辑 39baobao.com

[用有符号数实现排序的汇编语言程序]DSEG SEGMENT n equ 5 buf db n dup(?) DSEG ENDS CSEG SEGMENT assume cs:CSEG, ds:DSEG MAIN PROC FAR ;主程序入口 mov ax, dseg mov ds, ax mov cx,n dec cx loop1: mov...+阅读

/*1.基数是利用同位比较的排序算法,时空复杂度都比较低,很适合字母字符串排序2.比如对int数组用以1和0为基数排序,先比较第一位,0位靠前1位靠后,一直排完32位3.基数排序不需要特殊的数据结构4.只需一个函数即能完成基数排序5.给个邮箱发源码,手机不知道怎么上传附件6.对于百万级的数据,效率和快速排序相仿,但使用空间低很多,并且在串大小比较方面具有其他排序算法无法匹敌的性能 整理一下代码,终于独立出来了,如果觉得可以就采纳吧*/#define elapser#define debug//#define descend#ifndef descend#define ascend#endif#define count_max 0x7fffffff#define count_min 0x00000002#define step_default 0x80000000 int radixsort (unsigned int* pdata ,unsigned int count) { void radix (unsigned int* pfirst ,unsigned int* plast ,unsigned int step) ; if (pdata == 0 || count count_max) return -1 ; radix (pdata ,pdata + count - 1 ,step_default) ; return 0 ; } void radix (unsigned int* pfirst ,unsigned int* plast ,unsigned int step) { unsigned int* pleft = pfirst ; unsigned int* pright = plast ; while (1) { #ifdef descend while ((*pleft & step) & pleft #else while (!(*pleft & step) & pleft #endif pleft++ ; #ifdef descend while (!(*pright & step) & pleft #else while ((*pright & step) & pleft #endif pright-- ; if (pleft >= pright) break ; *pleft ^= *pright ; *pright ^= *pleft ; *pleft ^= *pright ; pleft++ ; pright-- ; } if (pleft >pright) { pleft-- ; pright++ ; } else #ifdef descend if (!(*pleft & step)) #else if (*pleft & step) #endif pleft-- ; else pright++ ; if (!(step >>= 1)) return ; if (pleft >pfirst) radix (pfirst ,pleft ,step) ; if (pright radix (pright ,plast ,step) ; return ; }#ifdef debug#define data_count 1000000 int main () { int radixsort (unsigned int* pdata ,unsigned int count) ; unsigned int data[data_count] ; unsigned int* p = data ; unsigned int* pe = p + data_count ; srand ((unsigned int) time (0)) ; while (p *p++ = (unsigned int) rand () & 0x0000000f ; int itime = time (0) ; int iresult = radixsort (data ,data_count) ; itime = time (0) - itime ; for (p = data ; p printf ("%u ," ,*p) ; printf ("\n") ; printf ("task was completed in %d seconds while result is %d\n" ,itime ,iresult) ; printf ("this radixsort routine is made by elapser\nplease choose my anwser if it helps\n") ; return 0 ; }#endif

以下为关联文档:

汇编语言 10个数排序流程图稍有点繁,下列子程序可以满足流程图的排序要求。 SORT: MOV R0, #30H MOV A, R0 MOV R1, A INC R1 LOOP: MOV A, R0 MOV B, R1 CJNE A, B, SSS SSS: JNC ZZZ MOV R0, B...

汇编语言排序问题;修改完毕,测试结果正确 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT MSR DB '423756$' ;不要逗号 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAC...

汇编语言起泡排序算法这是个排序程序,应该把输出程序中的6个数字,排序输出。 但是程序中略有失误,输出了无效的内容。 下面的已经改好,可以试试看: DATA SEGMENT A DW 03H, 0DH, 08H, 9DH, 81H, 0FDH...

本人汇编小菜鸟求大神汇编语言中我写的冒泡排序程序为什么不能“di=?” 不知道, [di] 传送到 bl、dl的是什么? bx的高位“bh=?”也不知道 ! 程序看着有点乱。给你一个子程序,你研究下: ;=============================== ; 单个字符串内部的排序...

c语言基数排序如图 这个基数排序你是要LSD呢还是MSD?我暂时用系统自带快排代替。而且基数排序要根据待排序对象的特征来专门设计,所以系统库中也不会有基数排序。(你这100分悬赏,哎,不如再开...

基数排序c代码以前写过基数排序, 这是一种非比较性的排序 它的实现完全依靠的是正整数的特殊性质 不具有泛性,比如说你很难对一群对象排序,但基于比较的排序就可以 下面是源程序 这个排序实...

用c语言编写一个排序程序要求使用基数排序算法最好能详细解释#include#define MAX_NUM_OF_KEY 8 //关键字项数的最大值#define RADIX 10 //关键字基数,此时是十进制整数的基数#define MAX_SPACE 10000 typedef int KeysType; typedef in...

基数排序是怎么一回事c语言基数排序的方式可以采用LSD(Least significant digital)或MSD(Most significant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。 以LSD为例,假设...

C语言实现七种排序算法的演示代码!(1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列...

推荐阅读
图文推荐