MIPS—冒泡排序
SORT
使用冒泡排序对整数数组进行排序,这种排序虽然不是最快的,但却是最简单的。
C语言代码
#include<stdio.h>
#include<iostream>
using namespace std; void swap(int v[], int k)
{
int tmp;
tmp = v[k];
v[k] = v[k + ];
v[k + ] = tmp;
} void sort(int v[], int n)
{
int i, j;
for (i = ; i < n; i += )
for (j = i - ; j >= && v[j] > v[j + ]; j -= )
swap(v, j);
} int arr[] = { ,,,,,, }; int main()
{
sort(arr, );
for (int i = ; i < ; i++)
printf("%d ", arr[i]);
return ;
}
MIPS代码
#sort
.data
array: .word ,,,,,,
str_old: .asciiz "old array:\n"
str_new: .asciiz "new array:\n"
blank: .asciiz " "
enter: .asciiz "\n"
.text
.globl main
main:
la $a0,str_old
li $v0,
syscall #print str_old string
jal print_array #print old arrry la $a0,array #array name
li $a1, #array length
jal sort la $a0,str_new
li $v0,
syscall #print str_new string
jal print_array #print new arrry li $v0,
syscall # exit print_array:
li $a1,
la $a2, array
loop1: blez $a1, over1
lw $a0, ($a2)
li $v0,
syscall la $a0, blank
li $v0,
syscall addi $a2, $a2,
addi $a1, $a1, -
j loop1
over1:
la $a0, enter
li $v0,
syscall
jr $ra #$a0: arrry
#$a1: k
swap:
sll $t1,$a1, #reg $t1 = k *
add $t1,$a0,$t1 #reg $t1 = v + k * lw $t0,($t1) #reg $t0(tmp) = v[k]
lw $t2,($t1) #reg $t2 = v[k + ] sw $t2,($t1) #v[k] = v[k + ]
sw $t0,($t1) #v[k+ ] = tmp(v[k])
jr $ra
#$a0: v
#$a1: n
#$s0: i
#$s1: j
sort:
addi $sp,$sp,- #make room on stack for registers
sw $ra,($sp)
sw $s3,($sp)
sw $s2,($sp)
sw $s1,($sp)
sw $s0,($sp) move $s2,$a0 #save v
move $s3,$a1 #save n move $s0,$zero #i =
for1tst:
slt $t0,$s0,$s3 #if(i < n),reg $t0 = 1
beq $t0,$zero,exit1 addi $s1,$s0,-
for2tst:
slti $t0,$s1, #if(j < 0),reg $t0 = 1
bnez $t0,exit2 #go to exit2 if(j < )
sll $t1,$s1, #$t1 = j *
add $t2,$s2,$t1 #$t2 = v + j *
lw $t3,($t2) #$t3 = v[j]
lw $t4,($t2) #$t4 = v[j + ]
slt $t0,$t4,$t3 #if(v[j + 1] < v[j]),reg $t0 = 1
beq $t0,$zero,exit2 #go to exit2 if(v[j + ] >= v[j]) move $a0,$s2 #first parameter is v
move $a1,$s1 #second parameter is j
jal swap addi $s1,$s1,- #j--
j for2tst #continue inner loop
exit2:
addi $s0,$s0,
j for1tst
exit1:
lw $s0,($sp)
lw $s1,($sp)
lw $s2,($sp)
lw $s3,($sp)
lw $ra,($sp)
addi $sp,$sp,
jr $ra
参考链接:wang22ti.com/2018/04/20/《计算机体系结构》实验2-1-MIPS指令集编程之冒泡排序/
MIPS—冒泡排序的更多相关文章
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- Html5 冒泡排序演示
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要 ...
- javascript冒泡排序
数组冒泡排序算法(升序) 升序:小数在前,大数在后 冒泡排序的原则:每次比较相邻两个元素,如果前一个数>后一个数,说明违反升序的要求,就将两数交换位置.否则,保持不变.继续比较下一对. 例如:玩 ...
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...
- C#冒泡排序算法
用了两种形式的数据,一个是泛型List,一个是数据int[].记录一下,作为自己学习过程中的笔记. using System; using System.Collections.Generic; us ...
- python排序之二冒泡排序法
python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...
- 以冒泡排序为例--malloc/free 重定向stdin stdout
esort.c 代码如下,可关注下mallloc/free,freopen重定向的用法,排序为每轮将最小的数放在最前面: #include<stdio.h> #include<mal ...
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...
随机推荐
- java命令行编译运行、打包jar
过程:java文件→class文件→exe执行文件 --------------------------------------------- 一.编译:从.java生成.class (1)ecl ...
- 技术胖Flutter第三季-16Stack层叠布局
16Stack层叠布局 在上面声明一个变量Stack里面包含两个元素,第一个 是CircleAvater第二个子对象是Container 效果 把文字房子啊中下的位置: 我们需要对齐属性 包含了x轴和 ...
- MR 图像分割 相关论文摘要整理
<多分辨率水平集算法的乳腺MR图像分割> 针对乳腺 MR 图像信息量大.灰度不均匀.边界模糊.难分割的特点, 提出一种多分辨率水平集乳腺 MR图像分割算法. 算法的核心是首先利用小波多尺度 ...
- myeclipse 2014 没有Install New Software的解决办法
要安装离线zip包,但在myeclipse2014的help菜单中找不到 Install New Software 解决如下: help--install from site--add--archiv ...
- editplus 3.4注册码,亲测有效
注册码: crsky 7879E-5BF58-7DR23-DAOB2-7DR30
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4.1 上报位置信息
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
- Windows个人常用软件推荐
一.必装软件 浏览器:Google chrome Google Chrome是一款可让您更快速.轻松且安全地使用网络的浏览器,它的设计超级简洁,使用起来更加方便,支持多标签浏览,同时也支持扩展插件.下 ...
- Babel 处理 webpack 无法处理的 ES 语法(Babel 6.x 和 Babel 7.x 有区别)(二)
//这是main.js是我们项目的js入口文件 //1:a导入jQuery,引入jQuery包用$变量接收,此方法与node中 const $ = require('jquery') 同 //此为ES ...
- CSS中em,px区别(转)
这里向大家描述一下CSS中px和em的特点和区别,px像素(Pixel),相对长度单位,像素px是相对于显示器屏幕分辨率而言的,而em是相对长度单位,相对于当前对象内文本的字体尺寸,相信本文介绍一定会 ...
- MySQL习题1 一对多实例 产品和分类
/* 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- ----------------- ...