【汇编语言实战】对输入的数组实现快速排序

C语言描述:

#include <stdio.h>// 交换数组中两个元素的位置
void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}// 分区函数,将数组按照基准值划分为两部分
int partition(int arr[], int low, int high) {int pivot = arr[high]; // 选取数组最后一个元素作为基准值int i = low - 1; // 定义一个指针,初始指向第一个元素的前一个位置for (int j = low; j < high; j++) {if (arr[j] <= pivot) {i++; // 指针向后移动一位swap(&arr[i], &arr[j]); // 将小于等于基准值的元素交换到指针位置的左侧}}swap(&arr[i + 1], &arr[high]); // 将基准值交换到指针位置的右侧return i + 1; // 返回基准值的位置
}// 快速排序函数
void quickSort(int arr[], int low, int high) {if (low < high) {int pivotIndex = partition(arr, low, high); // 获取基准值的位置quickSort(arr, low, pivotIndex - 1); // 对基准值左侧的子数组进行快速排序quickSort(arr, pivotIndex + 1, high); // 对基准值右侧的子数组进行快速排序}
}int main() {int arr[] = {4, 8, 6, 9, 2, 3, 4, 7, 2, 10};int n = sizeof(arr) / sizeof(arr[0]);// 输出原始数组printf("原始数组:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");// 调用快速排序函数quickSort(arr, 0, n - 1);// 输出排序后的数组printf("排序后的数组:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

汇编语言:

INCLUDE irvine32.inc
.datadat dd 4,8,6,9,2,3,4,7,2,10cnt dd ?l dd ?r dd ?
.code
start:mov eax,10mov cnt,eaxcall scanf;初始化l,rmov eax,0mov l,eax;mov eax,9mov r,eax;调用快排call quicksortcall printexit
;封装交换函数
swap proc ;利用xchg 可以少用一个寄存器来充当临时变量mov edx,dat[esi*4];xchg edx,dat[ebx*4];xchg edx,dat[esi*4];ret
swap endpquicksort procmov eax,lcmp eax,rjg overxor esi,esi;xor ebx,ebx;mov esi,l;imov ebx,r;jmov eax,dat[esi*4] sort_again:cmp ebx,esi;				while (i!=j)je over_loop;loop_j_again:cmp esi,ebx; 			while(i<j)jge over_loopcmp eax,dat[ebx*4]; 	while (a[j]>=a[l])jg loop_i_againadd ebx ,-1			;		j--jmp loop_j_again;	loop_i_again:cmp esi,ebx; 			while (i<j)jge over_loopcmp eax,dat[esi*4]; 	while (a[l]>=a[i])jl compare;add esi,1;					i++jmp loop_i_again;compare:cmp esi,ebx;			if (i>=j)jge over_loop;				breakcall swap;				swap(i,j)jmp sort_againover_loop:mov ebx,l;call swap;				swap(i,l)push esi; push ipush r  ;push rmov r,esiadd r ,-1call quicksort;			quicksort(l,i-1);pop rpop ebxmov l,ebx;inc lcall quicksort;			quicksort(i+1,r);over:ret
quicksort endp;封装一个输出函数
print procmov ecx,cntxor esi,esi
print_again:mov eax,dat[esi*4]call writeintcall crlfinc esi;loop print_againret
print endp
;封装输入函数
scanf procmov ecx,cntxor esi,esi
scanf_again:	call readintmov dat[esi*4],eaxinc esi;loop scanf_againret
scanf endp
end start

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/304794.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb中的Servlet是什么?怎么使用?

文章目录 一、什么是Servlet二、Servlet的基本内容1、Servlet的作用2、Servlet接口3、Servlet接口实现类4、Servlet接口实现类开发步骤5、Servlet对象生命周期6、HttpServletResquest接口7、HttpServletResponse接口8、请求对象和响应对象流程图9、请求对象和响应对象生命周期1…

阿里面试总结 一

写了这些还是不够完整&#xff0c;阿里 字节 卷进去加班&#xff01;奥利给 ThreadLocal 线程变量存放在当前线程变量中&#xff0c;线程上下文中&#xff0c;set将变量添加到threadLocals变量中 Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThrea…

迷宫 — — 蓝桥杯(动态规划)

迷宫 题目&#xff1a; 输入样例&#xff1a; 3 1 1 1 2 3 4 5 6 7 8 9 2 2 1 3 1 R输出样例&#xff1a; 21思路&#xff1a; 题目大意&#xff1a;给定一个n x m的平面网格&#xff0c;并且每一个格子都有一定的代价&#xff0c;并且设有障碍物和陷阱&#xff0c;障碍物的意…

c++的友元函数,详细笔记,细说三种友元用法

解释友元 友元用通俗易懂的话来说&#xff0c;就是&#xff1a;当有人来到你家里&#xff0c;他就只能呆在客厅里面&#xff0c;你是不可能让他来到你的卧室之中的。但是如果这个人是你的朋友&#xff0c;那么你是默许他可以进入你的卧室的。 此时呢&#xff1f;我告诉你&…

网络IO模型以及实际应用

网络IO模型 本文主要介绍了几种不同的网络IO模型&#xff0c;以及实际应用中使用到的Reactor模型等。 我们常说的网络IO模型&#xff0c;主要包含阻塞IO、非阻塞IO、多路复用IO、信号驱动IO、异步IO。 根据第一个阶段&#xff1a;是否需要阻塞&#xff0c;分为阻塞和非阻塞IO。…

【从浅学到熟知Linux】进程状态与进程优先级(含进程R/S/T/t/D/X/Z状态介绍、僵尸进程、孤儿进程、使用top及renice调整进程优先级)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程状态进程状态查看R运行状态&#xff08;running&#xff09;S睡眠状态&#xff08;sleeping&a…

GT收发器64B66B协议(2)自定义PHY设计

文章目录 前言一、设计框图二、GT_module三、PHY_module3.1、PHY_tx模块3.2、PHY_rx_bitsync模块3.3、PHY_rx模块 四、上板测试总结 前言 有了对64B66B协议的认识以及我们之前设计8B10B自定义PHY的经验&#xff0c;本文开始对64B66B自定义PHY的设计 一、设计框图 二、GT_modu…

Harmony鸿蒙南向驱动开发-UART

UART指异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;&#xff0c;是通用串行数据总线&#xff0c;用于异步通信。该总线双向通信&#xff0c;可以实现全双工传输。 两个UART设备的连接示意图如下&#xff0c;UART与其他模块一般用2线&a…

数据结构初阶:栈和队列

栈 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO &#xff08; Last In First Out &#xff09;的原则。…

为什么每个人都需要了解这些数据加密技术?

在数字时代&#xff0c;数据加密技术不仅对保护企业的商业秘密至关重要&#xff0c;也是个人隐私安全的重要屏障。随着技术的进步和网络犯罪的增加&#xff0c;数据加密已经成为了信息安全领域的一个热点议题。以下是探讨为什么每个人都需要了解这些数据加密技术的几个主要原因…

SpringBoot启动时banner设置

SpringBoot启动时banner设置 1.操作步骤2.各种banner图像 1.操作步骤 在application.properties文件中设置新的banner对于的文件位置&#xff0c;最好放在resources目录下 spring.banner.locationbanner.txt2.各种banner图像 &#xff08;1&#xff09;经典大佛图 具体txt文…

[通俗易懂]《动手学强化学习》学习笔记2-第2、3、4章

文章目录 前言小总结&#xff08;前文回顾&#xff09;第二章 多臂老虎机2.2.2形式化描述 第三章 马尔可夫决策过程3.6 占用度量 代码3.6 占用度量 定理2 第四章 动态规划算法4.3.3 策略迭代算法 代码 总结 前言 参考&#xff1a; 《动手学强化学习》作者&#xff1a;张伟楠&a…

为什么要部署IP SSL证书?怎么申请?

我们需要知道什么是IP SSL证书。SSL&#xff0c;全称为Secure Sockets Layer&#xff0c;即安全套接层&#xff0c;是为网络通信提供安全及数据完整性的一种安全协议。而IP SSL证书就是基于SSL协议的一种证书&#xff0c;它能够为网站和用户的数据传输提供加密处理&#xff0c;…

Prometheus-Grafana基础篇安装绘图

首先Prometheus安装 1、下载 https://prometheus.io/download/ 官网路径可以去这儿下载 2、如图&#xff1a; 3.解压&#xff1a; tar -xf prometheus-2.6.1.linux-amd64 cd prometheus-2.6.1.linux-amd64 4.配置文件说明&#xff1a; vim prometheus.yml 5.启动Promethe…

OpenHarmony NAPI 框架生成工具实现流程

NAPI 框架生成工具 可以根据用户指定路径下的 ts(typescript)接口文件一键生成 NAPI 框架代码、业务代码框架、GN 文件等。在开发 JS 应用与 NAPI 间接口时&#xff0c;底层框架开发者无需关注 Nodejs 语法、C 与 JS 之间的数据类型转换等上层应用转换逻辑&#xff0c;只关注底…

论文| Convolutional Neural Network-based Place Recognition - 2014

2014-Convolutional Neural Network-based Place Recognition

Qt plugin 开发UI界面插件

目录 1.创建接口 2.创建插件 3.创建插件界面 4.插件实现 5.创建应用工程 6.应用插件 1.创建接口 打开QtCreater&#xff0c;点击左上角“文件”->新建文件或项目&#xff0c;在弹窗中选择C/CHeader File。 输入文件名&#xff0c;选好路径&#xff08;可自行设置名称…

Golang | Leetcode Golang题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; func threeSumClosest(nums []int, target int) int {sort.Ints(nums)var (n len(nums)best math.MaxInt32)// 根据差值的绝对值来更新答案update : func(cur int) {if abs(cur - target) < abs(best - target) {best cur}}// 枚举 a…

BM96 主持人调度(二)(贪心算法)

一开始写的时候忘了给start、end数组赋值了 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** 计算成功举办活动需要多少名主持人* param n int整型 有n个活动* param start…

Qt——示波器/图表 QCustomPlot

一、介绍 QCustomPlot是一个用于绘图和数据可视化的Qt C小部件。它没有进一步的依赖关系&#xff0c;提供友好的文档帮助。这个绘图库专注于制作好看的&#xff0c;出版质量的2D绘图&#xff0c;图形和图表&#xff0c;以及为实时可视化应用程序提供高性能。QCustomPlot可以导出…