精华内容
下载资源
问答
  • 自定义一组有首地址为data的10个字的数组,请利用冒泡排序算法来编写程序,使该数组中的数按照从小到大的次序有序化。(注:10个字可以自己定义。) datas segment data1 dw 7,5,3,2,6,9,10,1,8 datas ends 冒泡...

    汇编语言:冒泡排序算法
    题目描述
    自定义一组有首地址为data的10个字的数组,请利用冒泡排序算法来编写程序,使该数组中的数按照从小到大的次序有序化。(注:10个字可以自己定义。)

    datas segment
    	data1 dw 7,5,3,2,6,9,10,1,8
    datas ends
    

    冒泡排序是一种较为简单的排序算法,需要使用嵌套循环。每一个外循环会将未排序数据中的最大值排到末尾,每一个小循环会将相邻两个数比较大小,从而使较大的数下沉,较小的数上浮。
    本题中,我们需要使用条件转移指令,比较指令(CMP),交换指令(XCHG)。值得一提的是,CMP和XCHG的两个操作数不能同时为内存中的数据,但可以一个是寄存器,一个是内存数据。所以,在比较和交换数据的时候,我们需要将其中一个内存数据放到寄存器中。
    (代码中有注释,可直接看代码)

    思路:
    将循环次数放入CX(设需要排序的数据有N个,则需要执行N-1个循环,即此时应MOV CX,9)。
    1.CX-1判断CX是否符合循环条件,当CX=0时,程序结束;否则,SI置零,BX置2倍的CX作为小循环的判断条件(若数据使用DB定义则无需使用BX,可直接使用CX);
    2.将DATA1[SI]放入AX寄存器中,并与DATA1[SI+2]作比较(由于本体数据定义时DW,所以用+2,若使用DB定义数据则应+1),若小于等于,则执行第3步;否则交换DATA1[SI]和DATA1[SI+2];
    3.比较SI和BX,相等时执行第1步,否则,SI+2,跳转到第二步。
    以上就是一个较为简单的冒泡排序法步骤,接下来看代码:

    DATAS SEGMENT
        DATA1 DW 7,5,3,2,6,9,10,1,8
    DATAS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS
    START:
        MOV AX,DATAS
        MOV DS,AX
        MOV CX,9
    L1: 					;最外层循环
    	MOV SI,0			;设置SI为零			
    	CMP CX,0			;判断循环是否结束
    	JE EXIT
    	DEC CX				;cx-1
    	MOV BX,CX
    	ADD BX,CX			;将bx置为cx的2倍,用来判断SI结束时的大小
    						;若数据以字节定义,则只需要将bx置为cx即可
    L2:
    	MOV AX,DATA1[SI]	;不能直接比较内存中的数字,所以我们需要将其中一个数字放到寄存器AX中
    	CMP AX,DATA1[SI+2]	;比较两个数
    	JLE L3				;小于等于的话,则直接跳到下一对数据的比较
    	XCHG AX,DATA1[SI+2]	;若大于,则通过两个XCHG语句,交换两内存中的数字
    	XCHG AX,[SI]
    						;内层循环结束时跳到外层循环
    L3:
    	CMP SI,BX
    	JE L1
    	ADD SI,2			;si+2,开始下一对数的比较
    	JMP L2
    EXIT:
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
    

    排序结果
    冒泡排序前运行前内存数据内容:
    在这里插入图片描述
    冒泡排序后:
    在这里插入图片描述
    冒泡排序运行正确,此题目完成!

    展开全文
  • 用起泡法对输入的十个字符由小到大顺序排列
    #include<stdio.h>
    #include<string.h>
    void qipao(char s[10][20]);
    void main()
    {
    char str[10][20];
    int i;
    printf("input string:\n");
    for(i=0;i<10;i++)
    scanf("%s",&str[i]);


    qipao(str);


    printf("\nthe order is:\n");
    for(i=0;i<10;i++)
    printf("%s ",str[i]);
    printf("\n");
    }
    void qipao(char s[10][20])
    {
    int i,j,k;
    char t[10];
    for(i=0;i<9;i++)
    {
    k=i;
    for(j=i+1;j<10;j++)
    {
    if(strcmp(s[k],s[j])>0)
    {
    strcpy(t,s[k]);
    strcpy(s[k],s[j]);
    strcpy(s[j],t);
    }
    }
    }
    }
    展开全文
  • //本题的思路:要在“123456789”中添加加减号,那么可以将它们隔开可以是这样“ 1 2 3 4 5 6 7 8 9”,这样在他们的...将得到的所有字符串进行分离并将分离的字符转化为数//字,加入集合,最后集合相加和100比对(注
    //本题的思路:要在“123456789”中添加加减号,那么可以将它们隔开可以是这样“ 1 2 3 4 5 6 7 8 9”,这样在他们的间隙就有空格(包括最前面的空格)9个,而这些空//格可以填写的内容只有3种情况:1.空,2.“+”3.“-”;这样算复杂度为3^9,用递归的方法实现并保存所有的集合。将得到的所有字符串进行分离并将分离的字符转化为数//字,加入到集合,最后集合相加和100比对(注意在分离时的问题,可能会导致出错,本人当时也是错了N多次)。
    void getNumber1(string str, int pos, vector<string>& vec)
    {
    	for (int i = 0; i < 3; i++)
    	{
    		switch(i)
    		{
    		case 0:
    			{
    				string tem_str = str;
    				char a[10];
    				memset(a, 0, 10);
    				itoa(pos, a, 10);
    				int mypos = str.find(a);
    				str.insert(mypos, ""); 
    				if (pos == 9)
    				{
    					vec.push_back(str);
    					str = tem_str;
    					break;
    				}
    				getNumber1(str, pos + 1, vec);
    				str = tem_str;
    				break;
    			}
    		case 1:
    			{
    				string tem_str = str;
    				char a[10];
    				memset(a, 0, 10);
    				itoa(pos, a, 10);
    				int mypos = str.find(a);
    				str.insert(mypos, "-");
    				if (pos == 9)
    				{
    					vec.push_back(str);
    					str = tem_str;
    					break;
    				}
    				getNumber1(str, pos + 1, vec);
    				str = tem_str;
    				break;
    			}
    		case 2:
    			{
    				string tem_str = str;
    				char a[10];
    				memset(a, 0, 10);
    				itoa(pos, a, 10);
    				int mypos = str.find(a);
    				str.insert(mypos, "+");
    				if (pos == 9)
    				{
    					vec.push_back(str);
    					str = tem_str;
    					break;
    				}
    				getNumber1(str, pos + 1, vec);
    				str = tem_str;
    				break;
    			}
    		default: 
    			break;
    		}
    	}
    	if (pos == 8)
    	{
    		return;
    	}
    }
    void main()
    {
    	vector<string> vec;
    	getNumber1(string("123456789"), 1, vec);
    	vector<string> result;
    	for (int i =0; i < vec.size(); i++)
    	{
    		if (i == 18062)
    		{
    			int m =0;
    		}
    		string str = vec[i];
    		vector<int> tem_vec;
    		int count = 0;
    		int flag = 1;
    		while (str.find("+") != string::npos||str.find("-") != string::npos)
    		{
    			int pos = str.find_first_of("+");
    			int pos1 =  str.find_first_of("-");
    			int rpos = 0;
    			if (pos1 >= 0&& pos >= 0)
    			{
    				if (pos > pos1)
    				{
    					rpos = pos1;
    				}else
    				{
    					rpos = pos;
    				}
    			}else
    			{
    				if (pos > pos1)
    				{
    					rpos = pos;
    				}else
    				{
    					rpos = pos1;
    				}
    
    			}
    			int tem = atoi(str.c_str());
    			tem_vec.push_back(tem);
    			char ch[10];
    			memset(ch, 0, 10);
    			char* p = itoa(tem, ch, 10);
    			int size = strlen(p);
    			p[0] = p[size - 1];
    			p[1] = '\0';
    			int mypos = str.find_first_of(p);
    			str = str.substr(mypos + 1);
    		}
    		for (int i = 0; i < tem_vec.size(); i++)
    		{
    			count+= tem_vec[i];
    		}
    		if (count == 100)
    		{
    			result.push_back(vec[i]);
    		}
    	}
    }
    展开全文
  • 【实训内容10】编写一个函数,要求用字符数组名作为参数,函数功能是将该字符数组中的字符按从小到大顺序排序 #include<stdio.h> #include<string.h> #define MAX 999 void *sort(char [],int); //...
    《程序设计基础实训指导教程-c语言》
    ISBN 978-7-03-032846-5
    p143
    7.1.2 上级实训内容
    

    【实训内容10】编写一个函数,要求用字符数组名作为参数,函数功能是将该字符数组中的字符按从小到大的顺序排序

    #include<stdio.h>
    #include<string.h>
    #define MAX 999
    void *sort(char [],int);    //声明指针函数,返回值为字符串首地址
    int main()
    {
        char a[MAX];
        int i;
        printf("输入字符串:");
    
        gets(a);
    
        char *p;
        p=sort(a,strlen(a));
        printf("\n排序后的字符串为:");
        puts(p);
    
        return 0;
    }
    void *sort(char str[],int len)
    {
        int i,j;
        char temp;
        printf("\n测试输入!-->");
        for(i=0;i<len;i++)
        {
            printf("%c",str[i]);
        }
        
        for(j=0;j<len-1;j++)    //冒泡排序
        {
            for(i=0;i<len-1-j;i++)
            {
                if(str[i]>str[i+1])
                {
                    temp=str[i+1];
                    str[i+1]=str[i];
                    str[i]=temp;
                }
            }
        }
        return str;
    }
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 动态从键盘输入20个二位无符号数,从小到大排序并显示。 DATAS SEGMENT ;此处输入数据段代码 sentence1 DB 'INPUT 20 NUM :',0AH,0DH,'$' BUF DB 30,?,30 DUP('$') sentence2 DB 0DH,0AH,'SHUCHU :',0DH,0AH,'$...
  • assume ds:data data segment a dw 1,4,2,5,7,9,6,3 data ends code segment start: mov ax,data mov ds,ax mov cx,8 dec cx lop1: push cx ...
  • 注释:当用数组b作实参调用函数sort()时,将数组b的地址传递给形参数组a,a和b指向的是一个数组空间,因此在函数sort()中对数组a从小到大排序时,数组b中的数据也随之改变。(在数组作为函数参数时,形参数组一般不...
  • 将几个数按从小到大顺序排序并在屏幕显示出来
  • ASCII码从小到大排序(字典序)

    千次阅读 2020-05-15 11:08:12
    设所有发送或者接收到的数据为集合M,将集合M内的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: ◆ 按参数...
  • //对34,5,22,-98,6,-76,0,-3这一组数从小到大排序 int arr[] = new int[]{34, 5, 22, -98, 6, -76, 0, -3}; //外层循环控制排序的次数 for (int i = 0; i < arr.length - 1; i++) { //内层循环读取数组的元素...
  • 从键盘输入一个字符和10个整数,若输入字符是’A’,将这10个数按从小到大顺序输出;若输入字符是’D’,则按从大到小输出;若输入其他字符,就结束。 Input 多组测试数据,每组输入10个整数和一个字符 Output ...
  • 输入5个字符串,从小到大输出

    千次阅读 2018-01-03 20:21:23
    #include #include int main(void) {  int i,j;  char a[5][20], t[20];  printf("输入5个字符串:\n");  for (i = 0; i  {  scanf("%s",a[i]);  }  for (i = 1; i  { ... 
  • 冒泡的思想是(假设为从大到小排序... if (a[j][j+1]) // 这里是从大到小排序,如果是从小到大排序,只需将“<”换成“>” { int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } }
  • Step 1:对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的 格式(即 key1=value1&amp;key2=value2...) 拼接成字符 string1 。 注意: 为空的参数不参与签名。 Step 2:在第一步中 ...
  • } 冒泡排序法1: 无序[0,a.length-i) 有序[a.length-i,a.length) 把的往后冒泡 public static void bubbleSort(int [] a) { for(int i=0;i;i++) { for(int j=1;j;j++){ if(a[j-1]>a[j]) { swap...
  • package tangzl; public class Sum{ public static void main(String args[]){ int i,j; int intArray[] = {23,12,45,11,9}; int l = intArray.length; for(i=0;...if(intArray[i]>intArray[j]){
  • 将字符串2复制字符串1 strcpy(s1,s2); 交换两个字符串:strcpy(t,s1);strcpy(s1,s2);strcpy(s2,t); 字符串比大小根据ascll码挨个比较,strcmp("a","b");返回的是小于0的数,strcmp("b","b");返回的是0,strcmp("b...
  • } } } // 打印测试结果 System.out.print("小到大排序方式为:"); for (int i = 0; i ; i++) { // 最后一个符号 if (i == age.length - 1) { System.out.print(+age[i]); } else { System.out.print(+age[i] + "); ...
  • #include #include #include int main(int argc, char* argv[]) { int i,j,k,l;... printf("数组从小到大顺序依次是:"); for(l = 0;l ;l++) { printf("%d ",str[l]); } printf("\n"); }
  • Latex相关符号

    千次阅读 2017-03-23 22:30:11
    函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} latex数学符号表(2)" style="border:none; max-width:100%"> \acute{\eta} latex数学符号表(2)" style="border:none; max...
  • #include using namespace std; void hhh(int array[10]) { int i, j, t; for (i = 0; i for(j=0;j if (array[j] > array[j + 1]) { t = array[j]; array[j] = array[j + 1];... 
  • 常用集合运算符号

    万次阅读 2017-08-02 07:29:13
    最近看论文碰到不少之前从未接触过的符号,因为主要是针对的集合操作,所以这里贴出下常见(有些对LZ来说并不常见的一些集合运算符)★ 符号名称:和集 [&] ◆ 符号解释:两个或两个以上的集合的所有元素组成一个新...
  • 本篇文章会用一行代码,让文本中出现的数字序号可以按照数字顺序进行排序。
  • LaTeX 各种命令,符号

    万次阅读 多人点赞 2016-06-12 15:27:42
    函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} latex数学符号表(2)" style="border:none; max-width:100%"> \acute{\eta} latex数学符号表(2)" style="border:none; max...
  • 从键盘输入10个无符号字数并从大到小进行排序,排序结果在屏幕上显示出来。要求能输入数字 和输出数字 且由大到小来排列,代码包含注释和伪代码,适用初学者理解代码
  • Q: 数字1-9依次排列:1,2,3,4,5,6,7,8,9;在每两个数之间填“+”或“-”,或不填,如:12+3-4+5+6+7+8+9。使它的值恰好等于100. 有多少种填法? 例如:123-4-5-6-7+8-9=100 程序如下: public class Test1 {...
  • 对任意输入入的一个字符串,把数字从小到大排列,字母逆序排列,并且输入后字母与数据交替排列。如:"5s3fa72cs4z134556sdd"执行后为"z1s2s3s3f4d4d5c5a56" packagecom.test; importjava.util.Arrays; importjava....
  • Latex各种命令、符号、公式、数学符号、排版等

    万次阅读 多人点赞 2017-12-01 10:56:03
    本文仅供学习参考使用,一切版权和解释权均归原作者所有,转载地址:...数学符号详细内容见:http://mohu.org/info/symbols/symbols.htm 直接查看链接  http://www.mo
  • 零知识证明:从小明白 如今,知识快餐业发达,区块链这么火的领域自然不会落下。经过一轮轮扫盲,共识、工作量证明、闪电网络等等概念对普罗大众已不再陌生,甚至各种解构、比喻、引申,将术语炒得比本义还玄乎...
  • #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; T MinToMax(T data[]) { T temp; for(int i=0; i&lt;3; i++) { for(int j=i; j&lt;... ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,469
精华内容 4,187
关键字:

从小到大的顺序排列符号