汇编语言实现十个数的排序
汇编语言输入10个数排序并输出的实现

汇编语⾔输⼊10个数排序并输出的实现⼀:题⽬描述在键盘输⼊任意10个数1. 按从⼩到⼤排序后,在计算机屏幕上先输出来。
要有结果提⽰(字符串显⽰)。
2. 将10个数做累加,结果在计算机屏幕显⽰累加和。
⼆:伪指令的定义1.数据段ATAS SEGMENTstring_1 DB 'Please input a numbers(0-65536):','$'string_2 DB 'ERROR: OVERFLOW! Please input again:','$'string_3 DB 'The array you have input is:',0ah,0dh,'$'string_4 DB 'After Sort the num is:',0ah,0dh,'$'string_5 DB ' ','$'DATA DW 10 DUP(?)massege DB 'The sum of the array is: ',0ah,0DH,'$'DATAS ENDS说明:string_1输⼊范围提⽰string_2输⼊错误提⽰string_3输出原数组提⽰string_4输出排序后数组提⽰string_5空格符DATA缓冲区数组2.堆栈段STACKS SEGMENTDW 256 dup(?)STACKS ENDS3.代码段CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS三:模块分解与实现1. DOS输⼊10个数字输⼊10个⽆符号数存⼊缓冲区,并且保证 num<65536num < 65536num<65536为何输⼊范围是65536呢⼀个字的最⼤表⽰范围是 FFFFFFFFFFFF 其在⼗进制的表⽰下为 65535HEX FFFFDEC65535BIN1111 1111 1111 11111.1 输⼊函数⼦程序;---------输⼊函数(单数字输⼊)------------Input PROC Nearpush AXpush BXpush CXpush DX;---------输⼊提⽰--------------MOV BX, 0CLCMOV DX, 0;----------输⼊数字--------------Lp_0:MOV AH, 1INT 21HCMP AL, 20H ;回车JE L_CRLF;----- x belong to [0,9] ----------SUB AL, 30H ; ASCII -> intJL L_ERRORCMP AL, 9JG L_ERROR;------- string -> int -----------MOV AH, 0 ;将 AL扩展成 AXXCHG AX, BX ;保护 AX值MOV CX, 10MUL CX ; bx *= 10ADD AX , BXJC L_ERROR ; OVERFLOW处理XCHG AX, BXJMP Lp_0L_ERROR:MOV DX, 0MOV BX, 0CALL CRLF ; 换⾏CALL ERROR ; 输出错误提⽰JMP Lp_0L_CRLF: ; 以换⾏作为⼀个数的结束标志MOV DX, 0MOV DATA[SI], BX ;解析函数功能:本质类似于⾼精度计算,将读⼊的⼀个串转成数字存储在DATA数组中分成三⼤部分⼀:输⼊提⽰⼆:错误判断及提⽰三:转化为数字L_ERROR 错误处理L_CRLF 结束处理我们来举⼀个123412341234 的例⼦Register1234AX1234BX0112123CX10101010AX+(BX∗CX)AX + (BX * CX)AX+(BX∗CX)最后将结果存储在DATA数组⾥2.实现冒泡排序冒泡排序作为⼀个简单的排序算法,时间复杂度 O(n2)O(n^2)O(n2) 需要两层循环,为了提⾼代码的可读性,我们将内层的循环写成⼀个⼦程序每次调⽤内层循环很简单,每次从头⽐到尾,遇到⽐它⼩的交换就可以了。
题44:编程输入10个正整数,然后自动按从大到小的顺序输出

题44:编程输入10个正整数,然后自动按从大到小的顺序输出。
题44:编程输入10个正整数,然后自动按从大到小的顺序输出。
Input输入只有一行,包括10整数.Output输出只有一行,包括10个整数。
Sample Input1 2 3 4 5 7 6 8 9 10Sample Output10 9 8 7 6 5 4 3 2 1提示:数组与排序,注意输出最后一个空格要考虑。
处理方法最后一个单独输出。
program ex_44;var a:array[1..10] of integer;i,j,t:integer;beginfor i:=1 to 10 do read(a[i]);for i:=1 to 9 dofor j:=i+1 to 10 doif a[i]<a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t; end;for i:=1 to 9 do write(a[i],' ');write(a[10]);end.题46:统计字母出现次数输入一串小写字母(以"."为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出)。
Input输入只有一行,包括若干个字符。
Output输出只有两行,第一行为出现的小写字母,第二行为字母的出现次数。
Sample Inputabdceeef.Sample Outputabcdef111131提示:注意利用字符做下标,可以让程序简单。
program ex_45;var a:array['a'..'z'] of integer;i,ch:char;beginread(ch);for i:='a' to 'z' do a[i]:=0;while ch<>'.' dobegina[ch]:=a[ch]+1;read(ch);end;for i:='a' to 'z' doif a[i]<>0 then write(i);writeln;for i:='a' to 'z' doif a[i]<>0 then write(a[i]);end.题48:求序列中所有递增或递减子序列的个数并输出子序列题48:求序列中所有递增或递减子序列的个数并输出子序列。
实现十个任意整数从小到大的排序算法

三、
#include <iostream>
using namespace std;
void print(int a[], int n){
for(int j= 0; j<n; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}Байду номын сангаас
void swap(int *a, int *b)
{
实现十个任意整数从小到大的排序算法
快速排序算法
一、
1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的元素值比基准值大。
3)此时基准元素在其排好序后的正确位置
4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
if(low < high){
int privotLoc = partition(a, low, high); //将表一分为二
quickSort(a, low, privotLoc -1); //递归对低子表递归排序
quickSort(a, privotLoc + 1, high); //递归对高子表递归排序
}
}
int main(){
//int a[10] = {3,1,5,7,2,4,9,6,10,8};
int a[10];
cout<<"请输入10个整数!";
for(int i=0;i<10;i++){
c语言选择法排序10个数

c语言选择法排序10个数
c语言选择法排序10个数的相关解析,如下所示:
解析:选择排序思路如下,设有10个元素a[1]~a[10],将a [1]与a[2]~a[10],若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作。
若a[2]~a[10]中有一个以上比a[1]小,则将其中最大的一个,与a[1]交换,此时a[1]中存放了10个中最小的数。
依次类推,共进行9轮比较,a[1]~a[10]就已按由小到大的顺序存放了。
c语言选择法排序10个数里分为四部分:(附图注解)
第一部分键盘输入10个数:
第二部分输出键盘录入的10个数:
第三部分排序逻辑:
第四部分排序后的10个数:
编译运行结果如下:。
基于8086用汇编语言实现的十个有符号数的排序(冒泡排序算法,输入为补码,从小到大)

提示:在做实验时,我们要自己将代码区和数据区分开,因为8086上没有软件帮我们完成这个任务。
MOV R0,#218 //之所以选择208这个大点的地址,是因为避免将数据写到了代码区LOOP1:IN //将数据读入AADD A,#128 //将补码转换为其对应的移码,因为补码本身参与加减不能比较出大//小,而移码就是将其真值在数轴上平移了2的n次方MOV @R0,AMOV A,R0sub a,#1SUB A,#208 //判断有没有输入完10个数JZ LOOP2 //输入完数据,跳转ADD A,#208MOV R0,AJMP LOOP1//没有输入完,就跳回接着输入LOOP2:MOV R0,#9 //9轮循环比较就可以排完序MOV R1,#209MOV R2,#210LOOP4:MOV A,@R2SUBC A,@R1JC LOOP3 //若210地址指向的单元中的数比209地址指向的单元中的小,则交//换LOOP5:MOV A,R2ADD A,#1SUBC A,#219 //判断此轮有没有比较完JZ LOOP6 //若比较完,就跳到LOOP6,否则继续比较ADD A,#219MOV R2,AJMP LOOP4LOOP3:MOV A,@R1MOV 208,AMOV A,@R2MOV @R1,AMOV A,208MOV @R2,AJMP LOOP5 //交换完了就跳回LOOP6: MOV A,R1ADD A,#1MOV R1,AADD A,#1MOV R2,A //让R2始终指向的是R1下一个单元MOV A,R0SUB A,#1JZ LOOP7 //判断9轮比较有没有完成,若完成,跳LOOP7,否则,继续比//较MOV R0,AJMP LOOP4LOOP7: MOV R0,#218LOOP9: MOV A,@R0 //下面这一段代码就是将数还原,因为原来我们是那人家的移码//形式来比较的,相信下面这一段就不用多讲了吧ADD A,#128MOV @R0,AMOV A,R0sub a,#1SUB A,#208JZ LOOP8ADD A,#208MOV R0,AJMP LOOP9LOOP8:END。
排序

实验一、用8086/8088汇编语言进行数据排序一、实验目的:1、熟悉EMU8086集成开发环境的使用。
2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。
3、熟悉INT 21H中断调用。
4、掌握数据排序的常用算法,利用汇编语言实现数据排序。
5、巩固理论知识,锻炼动手编程。
二、实验内容:1、在TABLE1开始的内存单元中,预先存储100个有符号字类型的数值。
2、编写代码、将TABLE1中的100个数值,按照从大到小的排序,放在TABLE2开始的内存单元中。
3、将TABLE2中的数字,顺序输出在屏幕上。
4、查看TABLE1开始的内存的100个数值。
5、查看TABLE2开始的内存的100个数值。
三、设计思路:1、自定义一个display函数,用来往屏幕上显示特定的字符。
2、定义一个data段,用来存储固定的字符。
3、定义一个code段,当做主程序。
4、所用的方法是冒泡排序法5、主程序中第一步先获取键盘输入。
6、主程序中第二步将键盘输入的数存储到内存中。
7、主程序中第三步用[基址+变址]方法进行冒泡排序。
8、主程序中第四步将排序好后新的数组从内存中取出,并回显到屏幕上。
四、排序算法:1、冒泡排序:(1)比较相邻的两个元素,如果第二个比第一个大,则交换这两个值。
(2)对每一对相邻元素做相同的工作,从开始第一对到结尾的最后一对,这样最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除去最后一个。
(实际过程中是最后一个值和后面的一个空值进行比较)(4)重复(1)~(3),直至排序完成。
2、选择排序:(1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
(2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
(3)重复(1)~(2)过程,直至排序完成。
3、插入排序:(1)构建有序数列。
(2)对于未排序的数据,在已排序的数列中从后向前扫描。
(3)找到相对应的位置后插入。
汇编语言实现十个数的排序

.DATAS SEGMENTDATA0 DB'Please input a numbers (0-65535):','$' DATA1 DB' over flow input again:','$' DATA2 DB'The num you have put is:',0ah,0dh,'$' DATA3 DB'After exchange the num is:',0ah,0dh,'$' DATA4 DB' ','$'DATA DW 10 DUP(?)DATAS ENDSSTACKS SEGMENTDW 256 DUP(?);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS;/****************************************/;-----------程序开始------------START:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,10;----------循环输入------------. L:CALL INPUTADD SI,2CALL NEWLINELOOP LMOV DX,OFFSET DATA2MOV AH,9INT 21H;-------输入后显示----------MOV CX,10MOV DI,0AGAIN:CALL PRINTCALL SPACEADD DI,2LOOP AGAIN;----------排序-------------MOV CX,9MOV DI,0LOOP0:CALL SORT.ADD DI,2LOOP LOOP0CALL NEWLINEMOV DX,OFFSET DATA3MOV AH,9INT 21H;----------交换后显示-------------MOV CX,10MOV DI,0AGAIN0:CALL PRINTCALL SPACEADD DI,2LOOP AGAIN0;----------返回系统--------------EXIT:MOV AH,4CHINT 21H;/**************************************/.;------------输入函数--------INPUT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DX;----------提示信息----------MOV DX,OFFSET DATA0MOV AH,9INT 21HMOV BX,0 ;BX存放十进制数CLCMOV DX,0L0:;----------输入数字----------MOV AH,1INT 21HCMP AL,0DHJE L1SUB AL,30HJL NEXT1CMP AL,9.JG NEXT1;---------转换成十进制数-------MOV AH,0XCHG AX,BXMOV CX,10MUL CXADD AX,BXJC NEXT1XCHG AX,BXJMP L0NEXT1:MOV DX,0MOV BX,0CALL NEWLINECALL ERRORJMP L0L1:CMP DX,0JNZ NEXT1MOV DATA[SI],BXMOV DX,0.POP DXPOP CXPOP BXPOP AXRETINPUT ENDP;/*****************************/;-------回车换行--------NEWLINE PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXPOP AXRETNEWLINE ENDP;/*********************************/;--------空格-------SPACE PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA4MOV AH,9INT 21HPOP DXPOP AXRETSPACE ENDP;/**************************************/ ;----------错误提示----------------ERROR PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA1MOV AH,9INT 21HPOP DXPOP AXRETERROR ENDP;/************************************/ ;--------冒泡排序子程序-----------SORT PROC NEARPUSH BXPUSH DXMOV SI,DILOOP1:ADD SI,2MOV BX,DATA[DI]CMP BX,DATA[SI]JA CHANGEJMP NEXTCHANGE:MOV DX,DATA[SI]MOV DATA[DI],DXMOV DATA[SI],BXNEXT:CMP SI,18POP DXPOP BXRETSORT ENDP;/***********************************/ ;-----------显示函数--------PRINT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,0MOV BX,10MOV AX,DATA[DI]LAST:MOV DX,0DIV BXPUSH DXINC CXCMP AX,0AGE:POP DXOR DX,30HMOV AH,2INT 21HLOOP AGEPOP DXPOP CXPOP BXPOP AXRETPRINT ENDP CODES ENDSEND START。
史上最牛最完整的汇编语言冒泡排序程序

;题目:编制一个完整的汇编语言程序,从键盘上读入若干个(可以超过十个)十进制数(正数),排序后在屏幕上输出。
;采用冒泡法排序,综合运用子程序和宏汇编,使程序模块化。
;程序代码M_DIRECT MACRO STRING ;定义一个宏,调用09号DOS功能在屏幕上显示一个字符串MOV DX,OFFSET STRINGMOV AH,09INT 21HENDMDATA SEGMENTDIR1 DB 'count of numbers tosort:$ ' ;提示输入要排序的数据的个数DIR2 DB 'please input sortingnumbers:$ ';提示输入要排序的数据DIR3 DB 'sortingresult:$ ' ;在屏幕上提示排好续的数据DIR4 DB '*************************$ 'DIR5 DB 'please chooseu(up)ord(down):$ 'DIR6 DB 'input error$ 'COUNT = 100WTEMP DW ?ARRAY DW COUNTDUP(?) ;用来保存输入的数据CRLF DB 13,10,'$ ' ;实现回车换行的功能,13→0DH,回车;10→0AH,换行LENDW ? ;保存实际输入的数据的个数DATA ENDS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:PUSH DSSUBAX,AX ;置AX为0PUSH AXMOVAX,DATA ;将数据段的地址送到DX中MOV DS,AXREAD: M_DIRECT DIR1 ;宏调用,在屏幕上提示输入要输入的数据的个数CALLP_GETNEW ;调用子程序P-GETNEW,输入要输入的数据的个数MOV CX,AXMOV LEN,AXLEA BX,ARRAYMOVAH,09 ;调用09号功能,实现回车换行LEA DX,CRLF INT21H ;屏幕提示输入要排序的数据M_DIRECT DIR2GETNUMBER: CALL P_GETNEW ;输入数据并保存到ARRAY中MOV [BX],AXADD BX ,2LOOP GETNUMBERSORT: MOV CX,LEN ;排序程序部分DEC CXMOV AH,09HLEA DX,CRLFINT 21HM_DIRECT DIR5COMPARE:MOV AH,01HINT 21HCMP AL,'U' ;判断是升序排序还是降序排序JZUP ;输入的字符是U或u跳转到升序排序程序CMP AL, 'u'JZ UPCMP AL,'D' ;输入的字符是D或d跳转到降叙排序程序JZ DOWNCMP AL, 'd'JZ DOWNUP: MOV DI,CX ;升序排序程序MOV BX,0LOOP1: MOV AX,ARRAY[BX]CMP AX,ARRAY[BX+2]JNGE CONTINUE1XCHG AX,ARRAY[BX+2]MOV ARRAY[BX],AXCONTINUE1: ADD BX,2LOOP LOOP1MOV CX,DILOOP UPJMPOUTPUT ;排序完后跳转到输出程序部分DOWN: MOV DI,CX ;降序排序程序MOV BX,0LOOP2: MOV AX,ARRAY[BX]CMP AX,ARRAY[BX+2]JGE CONTINUE2XCHG AX,ARRAY[BX+2]MOV ARRAY[BX],AXCONTINUE2: ADD BX,2LOOP LOOP2MOV CX,DILOOP DOWNJMPOUTPUT ;排序完后跳转到输出程序部分OUTPUT: MOV AH,09 ;回车换行LEA DX,CRLFINT 21HM_DIRECT DIR3MOVCX,LEN ;为输出程序设置好入口参数MOV BX,OFFSET ARRAYWRITE: MOV AX,[BX] ;输出排好序的数据MOVWTEMP,AX ;将入口参数存放到共享变量中CALL P_OUTPUTADD BX,2MOVDL,20H ;显示空格,将两个输出的数据分开MOV AH,02HINT 21HLOOP WRITEMOVAH,09 ;隔离两次输入排序输出的作用LEA DX,CRLFINT 21HM_DIRECT DIR4MOVAH,09 ;实现循环输入数据并排序输出LEA DX,CRLFINT 21HLOOP READRETMAIN ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;从键盘上输入一个数据的子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;P_GETNEW PROC PUSH BX ;出口参数:AX=补码表示的二进制数PUSH CX ;说明:负数用“-”引导,数据范围是+32767~-32768PUSH DXXOR BX,BX ;BX保存结果XOR CX,CX ;CX为正负标志,0为正,-1为负MOV AH,1 ;输入一个字符INT 21HCMP AL, '+' ;是“+”,继续输入字符JZ READ1CMP AL, '-' ;是“—,设置-1标志JNZ READ2MOV CX,-1READ1: MOV AH,1 ;继续输入字符INT 21HREAD2: CMP AL, '0' ;不是0~9之间的字符,则输入数据结束JB READ3CMP AL, '9'JA READ3SUB AL,30H ;是0~9之间的字符,则转换为二进制数;利用移位指令,实现数值乘10:BX←BX*10SHL BX,1MOV DX,BXSHL BX,1SHL BX,1ADD BX,DXMOV AH,0ADD BX,AX ;已输入数值乘10后,与新输入的数值相加JMP READ1 ;继续输入字符READ3: CMP CX,0 ;是负数,进行求补JZ READ4NEG BXREAD4: MOV AX,BX ;设置出口参数POP DXPOP CXPOP BXRET ;子程序返回P_GETNEW ENDP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;用冒泡法排序的子程序(从大到小);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;P_SORT PROC;RET;子程序返回;P_SORT ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;数据输出子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;P_OUTPUT PROC PUSH AX ;入口参数:共享变量WTEMPPUSH BXPUSH DXMOV AX,WTEMP ;取出显示的数据TEST AX,AX ;判断数据是零、正书还是负数JNZ WRITE1MOV DL, '0' ;是‘0’,显示‘0’后退出MOV AH,2INT 21HJMP WRITE5WRITE1: JNS WRITE2 ;是负数,显示“-”MOV BX,AX ;AX数据暂存于BXMOV DL, '-'MOV AH,2INT 21HMOV AX,BXNEG AX ;数据求补(绝对值)WRITE2: MOV BX,10PUSH BX ;10压入堆栈,做为推退出标志WRITE3: CMP AX,0 ;数据(商)为零,转向显示JZ WRITE4SUB DX,DX ;扩展被除数DX.AX DIV BX ;数据除以10ADD DL,30H ;余数(0~9)转换为ASC Ⅱ码PUSH DX ;数据各位先低位后高位压入堆栈JMP WRITE3WRITE4: POP DX ;数据各位先高位后低位弹出堆栈CMP DL,10 ;是结束标志10,则退出JE WRITE5MOV AH,2 ;进行显示INT 21HJMP WRITE4WRITE5: POP DXPOP BXPOP AXMOV DL,20HMOV AH,02HINT 21HRET ;子程序返回P_OUTPUT ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODE ENDSEND START。
JAVA小程序之10个数字排序问题

} } for(int i=0; i<10; i++) {
System.out.print(a[i] + " "); } } }
【实验总结】
同样过程重复发生就可以形成一个循环,运用数组来实现非常简单方便
【参考文献】
【1】郞波. 《java 语言程序设计》. 第二版 .清华大学出版社出版, 2011 年2月 【2】Cay S.Horstmann , Gary Cornell. Java 核心技术 卷 I:基 础知识 .第八版机械工业出版社出版 2012 年 4 月
Scanner s = new Scanner(System.in); int[] a Байду номын сангаас new int[10]; for(int i=0; i<10; i++) {
a[i] = s.nextInt(); } for(int i=0; i<10; i++) {
for(int j=i+1; j<10; j++) { if(a[i] > a[j]) { int t = a[i]; a[i] = a[j]; a[j] = t; }
10 个数字排序问题 【实验目的】
1、理解 Java 面向对象的编程思想 2、熟悉 Java 语言中循环语句的使用 3、具有独立分析问题和解决问题的能力,能够运用 Java 程序解决生活中遇 到的问题
【实验要求】
1、运用 Java 编写命令行程序 2、编译、运行、调试、维护 Java 程序 3、使用 for 循环结构 4、熟练使用 Eclipse 调试工具进行程序调试
【实验步骤】
可以利用选择法,即从后 9 个比较过程中, 选择一个最小的与第一个元素 交换, 下次类推, 即用第二个元素与后 8 个进行比较,并进行交换。
冒泡法对10个整数排序代码及运行结果

冒泡排序是一种简单但效率较低的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
这个过程持续重复,直到没有相邻的元素需要交换,也就是说该数列已经排序完成。
下面,我们将演示用冒泡排序对一个包含10个整数的数组进行排序的代码,并展示其运行结果。
1. 我们定义一个包含10个整数的数组:```javascriptconst arr = [4, 2, 8, 5, 1, 9, 3, 7, 6, 10];```2. 接下来,我们编写冒泡排序的代码:```javascriptfunction bubbleSort(arr) {const len = arr.length;for (let i = 0; i < len - 1; i++) {for (let j = 0; j < len - 1 - i; j++) {if (arr[j] > arr[j + 1]) {const temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}return arr;}const sortedArr = bubbleSort(arr);console.log(sortedArr);```3. 运行上述代码,我们得到排序后的数组为:```javascript[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]```通过以上代码和运行结果,可以清晰地看到冒泡排序算法对数组进行了排序,最终得到一个按升序排列的数组。
这个例子展示了冒泡排序算法的基本原理和实际运行效果。
冒泡排序算法虽然简单,但是在处理大型数据集时效率较低,不过对于小型数据集来说是一个简单有效的排序方法。
冒泡排序算法是一种经典的排序算法,它虽然简单但效率较低。
在实际应用中,由于其时间复杂度为O(n^2),并不适合处理大规模的数据集,但对于小规模的数据集来说是一个简单而有效的排序方法。
【C语言简单排序】——整数奇偶排序

【C语⾔简单排序】——整数奇偶排序7-1 整数奇偶排序 给定10个整数的序列,要求对其重新排序。
排序要求: 1.奇数在前,偶数在后; 2.奇数按从⼤到⼩排序; 3.偶数按从⼩到⼤排序。
输⼊格式: 输⼊⼀⾏,包含10个整数,彼此以⼀个空格分开,每个整数的范围是⼤于等于0,⼩于等于30000。
输出格式: 请在这⾥描述输出格式。
例如:对每⼀组输⼊,在⼀⾏中输出A+B的值。
输⼊样例: 按照要求排序后输出⼀⾏,包含排序后的10个整数,数与数之间以⼀个空格分开。
4731311120473498输出样例: 在这⾥给出相应的输出。
例如:4713117304123498思路: 这⾥分析题⽬,发现有三种情况下需要进⾏排序: 1.a[j]为奇数,a[j+1]为偶数 2.a[j]为奇数,a[j+1]为奇数且a[j] < a[j+1] 3.a[j]为偶数,a[j+1]为偶数且a[j] > a[j+1]代码:#include<stdio.h>int main(){int n = 10,i,j,tmp;int a[10];for(i = 0; i < n; i++){scanf("%d",&a[i]);}for(i = 0; i < n-1; i++){for(j = 0; j < n-1; j++){if(a[j] % 2 == 0 && a[j+1] % 2 != 0 || a[j] % 2 != 0 && a[j+1] % 2 != 0 && a[j] < a[j+1] || a[j] % 2 == 0 && a[j+1] % 2 ==0 && a[j] > a[j+1]) {tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;}}}for(i = 0; i < n; i++){printf("%d ",a[i]);}return0;}。
史上最牛最完整的汇编语言冒泡排序程序

;题目:体例一个完备的汇编谈话步调,从键盘上读进若搞个(不妨超出十个)十进造数(正数),排序后正在屏幕上输出. 之阳早格格创做;采与冒泡法排序,概括使用子步调战宏汇编,使步调模块化. ;步调代码M_DIRECT MACRO STRING ;定义一个宏,调用09号DOS功能正在屏幕上隐现一个字符串MOV DX,OFFSET STRINGMOV AH,09INT 21HENDMDATA SEGMENTDIR1 DB 'count of numbers to sort:$ ' ;提示输进要排序的数据的个数DIR2 DB 'please input sorting numbers:$ ';提示输进要排序的数据DIR3 DB 'sorting result:$ ' ;正在屏幕上提示排佳绝的数据DIR4 DB'*************************$ 'DIR5 DB 'please choose u(up)ord(down):$ 'DIR6 DB 'input error$ 'COUNT = 100WTEMP DW ?ARRAY DW COUNT DUP(?) ;用去保存输进的数据CRLF DB 13,10, '$ ' ;真止回车换止的功能,13→0DH,回车;10→0AH,换止LENDW ?;保存本质输进的数据的个数DATA ENDS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODE SEGMENTMAIN PROC FARASSUMECS:CODE,DS:DATASTART:PUSH DSSUBAX,AX ;置AX为0PUSH AXMOVAX,DATA ;将数据段的天点收到DX中MOV DS,AXREAD: M_DIRECT DIR1 ;宏调用,正在屏幕上提示输进要输进的数据的个数CALLP_GETNEW ;调用子步调P-GETNEW,输进要输进的数据的个数MOV CX,AXMOV LEN,AXLEA BX,ARRAYMOVAH,09 ;调用09号功能,真止回车换止LEA DX,CRLFINT21H ;屏幕提示输进要排序的数据M_DIRECTDIR2GETNUMBER: CALL P_GETNEW ;输进数据并保存到ARRAY中MOV [BX],AXADD BX ,2LOOP GETNUMBER SORT: MOV CX,LEN ;排序步调部分DEC CXMOV AH,09HLEA DX,CRLFINT 21HM_DIRECT DIR5COMPARE:MOV AH,01HINT 21HCMP AL, 'U' ;推断是降序排序仍旧落序排序JZUP ;输进的字符是U或者u 跳转到降序排序步调CMP AL, 'u'JZ UPCMP AL, 'D' ;输进的字符是D或者d跳转到落道排序步调JZ DOWNCMP AL, 'd'JZ DOWNUP: MOV DI,CX ;降序排序步调MOV BX,0LOOP1: MOV AX,ARRAY[BX]CMPAX,ARRAY[BX+2]JNGE CONTINUE1XCHGAX,ARRAY[BX+2]MOVARRAY[BX],AXCONTINUE1: ADD BX,2LOOP LOOP1MOV CX,DILOOP UPJMPOUTPUT ;排序完后跳转到输出步调部分DOWN: MOV DI,CX ;落序排序步调MOV BX,0LOOP2: MOV AX,ARRAY[BX]CMPAX,ARRAY[BX+2]JGE CONTINUE2XCHGAX,ARRAY[BX+2]MOVARRAY[BX],AXCONTINUE2: ADD BX,2LOOP LOOP2MOV CX,DILOOP DOWNJMPOUTPUT ;排序完后跳转到输出步调部分OUTPUT: MOV AH,09 ;回车换止LEA DX,CRLFINT 21HM_DIRECTDIR3MOVCX,LEN ;为输出步调树立佳出心参数MOV BX,OFFSET ARRAYWRITE: MOV AX,[BX] ;输出排佳序的数据MOVWTEMP,AX ;将出心参数存搁到同享变量中CALL P_OUTPUTADD BX,2MOVDL,20H ;隐现空格,将二个输出的数据分启MOV AH,02HINT 21HLOOP WRITEMOVAH,09 ;断绝二次输进排序输出的效率LEA DX,CRLFINT 21HM_DIRECTDIR4MOVAH,09 ;真止循环输进数据并排序输出LEA DX,CRLFINT 21HLOOP READRETMAIN ENDP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;从键盘上输进一个数据的子步调;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;P_GETNEW PROCPUSHBX ;出心参数:AX=补码表示的二进造数PUSHCX ;证明:背数用“-”带领,数据范畴是+32767~-32768PUSH DXXORBX,BX ;BX保存截止XORCX,CX ;CX为正背标记,0为正,-1为背MOVAH,1 ;输进一个字符INT 21HCMP AL, '+' ;是“+”,继承输进字符JZ READ1CMP AL, '-' ;是“—,树立-1标记JNZ READ2MOV CX,-1READ1: MOV AH,1 ;继承输进字符INT 21HREAD2: CMP AL, '0' ;没有是0~9之间的字符,则输进数据中断JB READ3CMP AL, '9'JA READ3SUBAL,30H ;是0~9之间的字符,则变换为二进造数;利用移位指令,真止数值乘10:BX←BX*10SHL BX,1MOV DX,BXSHL BX,1SHL BX,1ADD BX,DXMOV AH,0ADDBX,AX ;已输进数值乘10后,与新输进的数值相加JMPREAD1 ;继承输进字符READ3: CMP CX,0 ;是背数,举止供补JZ READ4NEG BXREAD4: MOV AX,BX ;树立出心参数POP DXPOP CXPOP BXRET ;子步调返回P_GETNEW ENDP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;用冒泡法排序的子步调(从大到小);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;P_SORT PROC;RET;子步调返回;P_SORT ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;数据输出子步调;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;P_OUTPUT PROCPUSH AX ;出心参数:同享变量WTEMPPUSH BXPUSH DXMOV AX,WTEMP ;与出隐现的数据TEST AX,AX ;推断数据是整、正书籍仍旧背数JNZ WRITE1MOV DL, '0' ;是‘0’,隐现‘0’退却出MOV AH,2INT 21HJMP WRITE5WRITE1: JNS WRITE2 ;是背数,隐现“-”MOVBX,AX ;AX数据久存于BXMOV DL, '-'MOV AH,2INT 21HMOV AX,BXNEGAX ;数据供补(千万于值)WRITE2: MOV BX,10PUSHBX ;10压进堆栈,搞为推退出标记WRITE3: CMP AX,0 ;数据(商)为整,转背隐现JZ WRITE4SUB DX,DX ;扩展被除数DX.AXDIVBX ;数据除以10ADD DL,30H ;余数(0~9)变换为ASCⅡ码PUSHDX ;数据诸位先矮位后下位压进堆栈JMP WRITE3WRITE4: POP DX ;数据诸位先下位后矮位弹出堆栈CMP DL,10 ;是中断标记10,则退出JE WRITE5MOVAH,2 ;举止隐现INT 21HJMP WRITE4WRITE5: POP DXPOP BXPOP AXMOV DL,20HMOV AH,02HINT 21HRET ;子步调返回P_OUTPUT ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODE ENDSEND START。
c语言十个整数倒序

c语言十个整数倒序
要对C语言中的十个整数进行倒序排列,你可以使用一个数组来存储这些整数,并使用一个循环来实现倒序。
以下是一个简单的示例代码:
```c
#include <stdio.h>
int main() {
// 定义一个包含十个整数的数组
int numbers[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 输出原始数组
printf("原始数组:\n");
for (int i = 0; i < 10; i++) {
printf("%d ", numbers[i]);
}
// 倒序排列数组
for (int i = 0; i < 5; i++) {
// 交换头尾元素
int temp = numbers[i];
numbers[i] = numbers[9 - i];
numbers[9 - i] = temp;
}
// 输出倒序数组
printf("\n倒序数组:\n");
for (int i = 0; i < 10; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
```
在这个例子中,我们首先定义一个包含十个整数的数组`numbers`,然后使用两个循环来分别输出原始数组和倒序数组。
在倒序的循环中,我们通过交换数组的头尾元素实现倒序排列。
输出结果会显示原始数组和倒序数组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DATAS SEGMENT
DATA0 DB'Please input a numbers (0-65535):','$' DATA1 DB' over flow input again:','$' DATA2 DB'The num you have put is:',0ah,0dh,'$' DATA3 DB'After exchange the num is:',0ah,0dh,'$' DATA4 DB' ','$'
DATA DW 10 DUP(?)
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?);此处输入堆栈段代码STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS ;/****************************************/ ;-----------程序开始------------
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,0
MOV CX,10
;----------循环输入------------
L:
CALL INPUT
ADD SI,2
CALL NEWLINE
LOOP L
MOV DX,OFFSET DATA2
MOV AH,9
INT 21H
;-------输入后显示----------
MOV CX,10
MOV DI,0
AGAIN:
CALL PRINT
CALL SPACE
ADD DI,2
LOOP AGAIN
;----------排序-------------
MOV CX,9
MOV DI,0
LOOP0:
CALL SORT
ADD DI,2
LOOP LOOP0
CALL NEWLINE
MOV DX,OFFSET DATA3
MOV AH,9
INT 21H
;----------交换后显示-------------
MOV CX,10
MOV DI,0
AGAIN0:
CALL PRINT
CALL SPACE
ADD DI,2
LOOP AGAIN0
;----------返回系统--------------
EXIT:
MOV AH,4CH
INT 21H
;/**************************************/ ;------------输入函数--------
INPUT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
;----------提示信息----------
MOV DX,OFFSET DATA0
MOV AH,9
INT 21H
MOV BX,0 ;BX存放十进制数
CLC
MOV DX,0
L0:
;----------输入数字----------
MOV AH,1
INT 21H
CMP AL,0DH
JE L1
SUB AL,30H
JL NEXT1
CMP AL,9
JG NEXT1
;---------转换成十进制数-------
MOV AH,0
XCHG AX,BX
MOV CX,10
MUL CX
ADD AX,BX
JC NEXT1
XCHG AX,BX
JMP L0
NEXT1:
MOV DX,0
MOV BX,0
CALL NEWLINE
CALL ERROR
JMP L0
L1:
CMP DX,0
JNZ NEXT1
MOV DATA[SI],BX
MOV DX,0
POP DX
POP CX
POP BX
POP AX
RET
INPUT ENDP
;/*****************************/ ;-------回车换行--------
NEWLINE PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
;/*********************************/
;--------空格-------
SPACE PROC NEAR
PUSH AX
PUSH DX
MOV DX,OFFSET DATA4
MOV AH,9
INT 21H
POP DX
POP AX
RET
SPACE ENDP
;/**************************************/ ;----------错误提示----------------
ERROR PROC NEAR
PUSH AX
PUSH DX
MOV DX,OFFSET DATA1
MOV AH,9
INT 21H
POP DX
POP AX
RET
ERROR ENDP
;/************************************/ ;--------冒泡排序子程序-----------
SORT PROC NEAR
PUSH BX
PUSH DX
LOOP1:
ADD SI,2
MOV BX,DATA[DI]
CMP BX,DATA[SI]
JA CHANGE
JMP NEXT
CHANGE:
MOV DX,DATA[SI]
MOV DATA[DI],DX
MOV DATA[SI],BX
NEXT:
CMP SI,18
JL LOOP1
POP DX
POP BX
RET
SORT ENDP
;/***********************************/ ;-----------显示函数--------
PRINT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,0
MOV BX,10
MOV AX,DATA[DI]
LAST:
MOV DX,0
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ LAST
AGE:
POP DX
OR DX,30H
MOV AH,2
INT 21H
LOOP AGE
POP DX
POP CX
POP BX
POP AX
RET
PRINT ENDP CODES ENDS
END START。