首页 > 其他分享 >冒泡排序

冒泡排序

时间:2023-05-08 11:55:14浏览次数:37  
标签:int void 冒泡排序 hands ax size

目录

纸上得来终觉浅,绝知此事要躬行

汇编实现及推导过程

;程序名称:
;功能:冒泡排序,方法5:不用两两比较,第一位数和其余数比较,小就交换
;=======================================
assume      cs:code,ds:data
;排序
;手推算法;
;外层循环条件 si=0;si<len-1;si++
;内层循环条件 di=si+1;di<=len-1;di++
;算法:不用两两比较,第一位数和其余数比较,小就交换
;初始数据:       6,5,4,3,2,1
;si = 0 bi =1 	5,6,4,3,2,1
;si = 0 bi =2 	4,6,5,3,2,1
;si = 0 bi =3 	3,6,5,4,2,1
;si = 0 bi =4 	2,6,5,4,3,1
;si = 0 bi =5 	1,6,5,4,3,2
;si = 1 bi =2 	1,5,6,4,3,2
;si = 1 bi =3 	1,4,6,5,3,2
;si = 1 bi =4 	1,3,6,5,4,2
;si = 1 bi =5 	1,2,6,5,4,3
;si = 2 bi =3 	1,2,5,6,4,3
;si = 2 bi =4 	1,2,4,6,5,3
;si = 2 bi =5 	1,2,3,6,5,4
;si = 3 bi =4 	1,2,3,5,6,4
;si = 3 bi =5 	1,2,3,4,6,5
;si = 4 bi =5 	1,2,3,4,5,6
data segment
    vals db 2,1,-1      ;准备的有符号数,两正两负
    len  =  $-vals-1    ;len保存循环次数
data ends

code segment
    start:
          mov  ax,data            ;初始化数据段
          mov  ds,ax

    ;准备
          mov  si,-1              ;外层循环指针
    ;外层循环
    loop1:
          inc  si                 ;外层循环指针+1
          cmp  si,word ptr len    ;判断是否循环完成
          jnb  over
          mov  di,si              ;初始化内层指针
    ;内层循环
    loop2:
          inc  di                 ;内层循环指针
          cmp  di,word ptr len    ;判断是否循环完成
          ja   loop1              ;继续外层循环
          xor  ax,ax
          MOV  al,vals[si]        ;di处的值放入ax中
          MOV  ah,vals[di]        ;di+1处的值放入dx中
          cmp  al,ah              ;比大小
          jnl  swap               ;ax>dx,两个值交换
          jmp  loop2              ;继续内层循环
    ;数据交换
    swap: 
          xchg al,ah              ;ax与dx的值交换
          MOV  vals[si],al        ;ax的值放回到变量中
          MOV  vals[di],ah        ;dx的值放回变量中
          jmp  loop2              ;继续内层循环
    over: 
          mov  ax,4c00h           ;dos中断
          int  21H
code ends
    end     start

高级语言实现

void swap(int* x, int* y)
{
	int tmp = *x;
	*x = *y;
	*y = tmp;
}

void bubble(int hands[], int size)
{
	for (int i = 0; i < size - 1; i++)
		for (int j = 0; j < size - i - 1; j++)
			if (hands[j] > hands[j + 1])
				swap(&hands[j], &hands[j + 1]);
}

int main(void)
{
    bubble(_, _);
    return 0;
}

标签:int,void,冒泡排序,hands,ax,size
From: https://www.cnblogs.com/ylc0x01/p/17381295.html

相关文章

  • 冒泡排序
    voidbubble_sort(intarr[],intsz)//这里的arr[]传递的是首地址{ inti=0;for(i=0;i<sz-1;i++)//一共进行多少趟 {intj=0;for(j=0;j<sz-1-i;j++)//每一趟进行多少次冒泡排序 { if(arr[j]>arr[j+1])//如果判定条件成立将上一个数值赋值给下一个数值{ int......
  • 一篇文章讲明白冒泡排序
    原文点此跳转什么是冒泡排序(bubbleSort)?冒泡排序是所有排序算法中最简单的一种,当然也是性能最差的一种。冒泡排序的思想其实很简单,就如它的名字一样在水中"冒泡"。水中有很多散乱的小气泡,然后一个个气泡往水面上冒出。例如一组无序的数组,最左边就是水底,最右边就是水面,最左边的元素......
  • 手把手教你掌握冒泡排序思路
    完整代码:#include<stdio.h>bubble_sort(intarr[],intsz){inti=0;intj=0;for(i=0;i<sz-1;i++){for(j=0;j<sz-1-i;j++){if(arr[j]>arr[j+1]){inttmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}}}intmain(){intarr[10]=......
  • 8冒泡排序
    #include<iostream>usingnamespacestd;#defineN10intmain(){ intarr[N],a,k,i,j,count; cin>>a; for(i=0;i<a;i++){ cin>>arr[i]; } for(i=0;i<a;i++){ for(j=i+1;j<a;j++){ k=arr[j]; if(k<arr[i]){ arr[j]=arr[i]; arr[i]=......
  • c语言趣味编程(8)冒泡排序
    一、问题描述对n个整数进行升序排列(数据由键盘键入)二、设计思路(1)读取从键盘键入的n个数据,存入数组a中;(2)用for循环对数组a中的数据进行遍历,并用if语句来判断大小,按从小到大存入;(3)遍历输出数组中已经完成升序排列的数组元素;三、程序流程图 四、伪代码五、代码1#include......
  • 冒泡排序
    问题描述:对N个整数(数据由键盘输入)进行升序排列。这里采用五个数。代码如下:#include<iostream>#include<vector>usingnamespacestd;intmain(){ inta[5],t; for(inti=0;i<5;i++){ cin>>a[i]; } for(inti=1;i<=4;i++){ for(intj=0;j<......
  • 排序算法之详解冒泡排序
    引入冒泡排序顾名思义,就是像冒泡一样,泡泡在水里慢慢升上来,由小变大。虽然冒泡排序和冒泡并不完全一样,但却可以帮助我们理解冒泡排序。思路一组无序的数组,要求我们从小到大排列我们可以先将最大的元素放在数组末尾再将第二大的数放在数组的倒数第二个位置再将第三大......
  • 冒泡排序详解
    引入:::tips冒泡排序顾名思义,就是像冒泡一样,泡泡在水里慢慢升上来,由小变大。虽然冒泡排序和冒泡并不完全一样,但却可以帮助我们理解冒泡排序。:::思路:::tips一组无序的数组,要求我们从小到大排列我们可以先将最大的元素放在数组末尾再将第二大的数放在数组的倒数第二......
  • 1.8 冒泡排序
    #include<stdio.h>#defineN10intmain(){ints[N],i,j,a[N],t,count=0;printf("请为数组元素赋初值:\n");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[......
  • 1.8 冒泡排序
    第一部曲:从头到尾扫描数组的数,进行n-1轮,每次进行n-i次比较,因为经过前面i次,后面i个数已经确定了大小,不用再参与比较,如果后面的数大与前面的数就交换,第一轮结束后就把最大的数放在了最后,后面继续比较。需要注意两个数交换的时候要引入一个中间数,利用中间数才能进行交换。第二部曲:......