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++之冒泡排序. ...
随机推荐
- Flutter实战视频-移动电商-36.FlutterToast插件使用
36.FlutterToast插件使用 https://github.com/PonnamKarthik/FlutterToast fluttertoast: ^ category_page.dart ...
- [ACM] hdu 1285 确定比赛名次 (拓扑排序)
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- [Xcode 实际操作]九、实用进阶-(22)Storyboard故事板的常用布局结构
目录:[Swift]Xcode实际操作 本文将演示如在使用故事板搭建项目时,常用的一种故事板布局结构. 在项目导航区,打开故事板文件[Main.storyboard] 当前故事板中只有一个视图控制器控 ...
- 机智云连接ESP8266--远程控制点亮RGB灯
概述 智能灯,是一个简单常见的智能产品,硬件电路简单,程序本身也不复杂:下面我们使用esp8266开发板和机智云云端,实现如何将一个传统的灯泡,改造成可以远程控制开关的智能灯. 1.准备工作 硬件: ...
- Mysql 到 Hbase 数据如何实时同步,强大的 Streamsets 告诉你
很多情况大数据集群需要获取业务数据,用于分析.通常有两种方式: 业务直接或间接写入的方式 业务的关系型数据库同步到大数据集群的方式 第一种可以是在业务中编写代码,将觉得需要发送的数据发送到消息队列,最 ...
- C笔记列表
笔记列表 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明. 要理解指针就要先理解计算机的内存.计算机内存会被 ...
- noip2017普及组
过了这么久才来写博客,也是我这么一段时间都很低迷吧.... 老实来说,今年应该是要打提高组的...可还是打了普及组... 其实最猥琐的还是我连普及都写挂了,作为一个学了两年的人,图论,进阶dp都写过的 ...
- 最短路之Floyd(多源)HDU 1874
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #def ...
- Django (六) 视图 views
views 1. 视图及HttpRequest 和HttpResponse Django中的视图主要用来接受Web请求,并做出响应. 视图的本质就是一个Python中的函数 视图的响应分为两大类 1) ...
- ZROI #364. 【2018普转提day18专题】嘤嘤嘤
ZROI #364. [2018普转提day18专题]嘤嘤嘤 直接贴代码 具体见注释 #include<stdio.h> #include<cstring> #include& ...