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++之冒泡排序. ...
随机推荐
- mysql添加DATETIME类型字段导致Invalid default value错误的问题
例如: CREATE TABLE foo ( `creation_time` DATETIME DEFAULT CURRENT_TIMESTAMP, `modification_time` DATET ...
- C#简单的国际化
1.新建一个资源文件夹,并在资源文件夹新建中英问的资源文件,如图: 2.中英文资源文档添加资源,如图: 3.Program.cs中添加根据系统语言确定中英文,这里默认为英文: using Intern ...
- Structure Streaming和spark streaming原生API访问HDFS文件数据对比
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Structure Stream访问方式 code examples import org.apache.sp ...
- 洛谷 - P3033 - 牛的障碍Cow Steeplechase - 二分图最大独立集
https://www.luogu.org/fe/problem/P3033 二分图最大独立集 注意输入的时候控制x1,y1,x2,y2的相对大小. #include<bits/stdc++.h ...
- Bloomberg 的一些功能
FFLO: 查看ETF流动,注意在View点击Contries后选择Asia,查看亚洲流动. 随后对感兴趣的国家点击查看具体股票的流动 关闭Launchpad View之后再次打开: BLP 修改La ...
- Mysql用户root密码找回
1.本试例的环境如下: 2.mysql数据库的版本如下,此数据库运行多实例: mysql Ver 15.1 Distrib 10.2.24-MariaDB, for Linux (x86_64) us ...
- 51Nod 1272 最大距离 (栈或贪心)
#include <cstdio> #include <queue> #include <cstring> #include <iostream> #i ...
- shell学习(4)- awk
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- AtCoder Regular Contest 078 C
C - Splitting Pile Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement Snu ...
- Python开发 第02课 Python 数据类型
1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.因此,变量可以指定不同的数据 ...