【汇编语言】使用选择排序对给定的数组排序

简介: 【汇编语言】使用选择排序对给定的数组排序

C语言描述:


#include <stdio.h>
// 选择排序函数
void selectionSort(int arr[], int n) {
    int i, j, minIndex, temp;
    for (i = 0; i < n - 1; i++) {
        minIndex = i;
        // 寻找最小元素的下标
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        // 将最小元素与当前元素交换位置
        temp = arr[minIndex];
        arr[minIndex] = arr[i];
        arr[i] = temp;
    }
}
int main() {
    int arr[] = {5, 2, 8, 1, 6};
    int n = sizeof(arr) / sizeof(arr[0]);
    int i;
    // 调用选择排序函数进行排序
    selectionSort(arr, n);
    // 输出排序后的数组
    printf("排序后的数组:\n");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}


汇编语言:

include irvine32.inc
.data
array dword 5, 2, 8, 1, 6   ; 待排序的数组
len = ($ - array) / 4       ; 数组长度
msg db "Sorted array: ", 0
.code
main proc
    mov esi, 0              ; 初始化外层循环计数器 i
outer_loop:
    cmp esi, len            ; 比较 i 和数组长度
    jge end_sort            ; 如果 i >= len,跳转到结束排序
    mov edi, esi            ; 初始化最小值索引为 i
    mov eax, array[esi*4]   ; 将当前元素作为最小值
    mov ecx, esi            ; 初始化内层循环计数器 j
inner_loop:
    inc ecx                 ; j++
    cmp ecx, len            ; 比较 j 和数组长度
    jge update_min          ; 如果 j >= len,跳转到更新最小值
    mov edx, array[ecx*4]   ; 取出 array[j]
    cmp edx, eax            ; 比较 array[j] 和最小值
    jge inner_loop          ; 如果 array[j] >= 最小值,继续内层循环
    mov eax, edx            ; 更新最小值
    mov edi, ecx            ; 更新最小值索引
    jmp inner_loop          ; 继续内层循环
update_min:
    ; 交换 array[i] 和 array[edi]
    mov ebx, array[esi*4]
    mov edx, array[edi*4]
    mov array[esi*4], edx
    mov array[edi*4], ebx
    inc esi                 ; i++
    jmp outer_loop          ; 继续外层循环
end_sort:
    call crlf
    mov esi, 0              ; 初始化循环计数器
    mov edx, offset msg
    call writestring
print_array:
    mov eax, array[esi*4]   ; 取出数组元素
    call writeint           ; 输出数组元素到屏幕
    call crlf
    inc esi                 ; 计数器加一
    cmp esi, len            ; 比较计数器和数组长度
    jl print_array          ; 若计数器小于数组长度,则继续输出
    exit
main endp
end main


运行结果:


目录
相关文章
|
3月前
|
C语言
【汇编语言实战】使用插入排序对给定的数组排序(用栈传递参数)
【汇编语言实战】使用插入排序对给定的数组排序(用栈传递参数)
17 1
|
3月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
69 1
|
3月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
159 0
|
1月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
1月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍
|
2月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
|
1月前
|
编译器
8086 汇编笔记(八):转移指令的原理
8086 汇编笔记(八):转移指令的原理
|
2月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读
|
3月前
|
安全 编译器
8086 汇编笔记(四):[BX] 和 loop 指令
8086 汇编笔记(四):[BX] 和 loop 指令