直接插入排序、冒牌排序(汇编实现)

这是一个汇编语言程序,用于实现直接插入排序和冒泡排序算法,对内存中100个学生的成绩数据进行排序。程序还能够找出最高分和最低分并分别存储在MIN和MAX单元中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;#Mode=DOS
;explain:
;题目要求:
;		在内存Score缓冲区中存放有 100个学生的成绩数据,为无符号字节数。设计程序完成如下功能:
;			①采用直接排序法对数组进行由小到大排序;
;			②采用冒泡排序方式对数组进行由大到小排序;
;			③将最高和最低的分数分别存放在MIN和MAX单元中。
;author: ZhongQiang
;id:     53101512
;date:   2012-11-16
data segment
	Score db 87,89,94,77,87,69,90,99,98,66;十进制100分制
			db 76,86,69,75,66,90,97,80,92,70
			db 91,72,78,88,84,89,92,75,89,77
			db 67,85,96,56,76,85,66,87,99,56
			db 58,97,66,78,58,87,77,96,88,59
			db 86,69,90,67,97,68,79,76,78,56
			db 87,98,67,86,99,67,86,89,66,87
			db 74,93,94,58,95,79,82,84,96,39
			db 95,78,85,93,95,97,96,70,40,33
			db 86,96,30,86,98,79,80,98,89,70
	num equ $-Score-1
	insert db 40 dup('*'),0dh,0ah,'(1)Insert sort (up to):',0dh,0ah,40 dup('*'),0dh,0ah,'$'
	bubble db 40 dup('*'),0dh,0ah,'(2)Bubble sort (down to):',0dh,0ah,40 dup('*'),0dh,0ah,'$'
	message_MIN db 40 dup('*'),0dh,0ah,'MIN:-> ','$'
	message_MAX db 0dh,0ah,'MAX:-> ','$'
	crlf db 0dh,0ah,'$';换行
	msg db '=> ',
在C语言中,冒泡排序通常是一个简单的非递归算法,但它也可以通过递归来实现。然而,冒泡排序由于其本身的特性(每一遍都会把最大的数“冒”到顶部),实际上并不是非常适合使用递归的方式去优化。因为每次比较都需要检查是否交换,如果内部的元素已经有序,递归就会变得多余。 但是,为了演示递归的概念,我们可以创建一个递归版本的冒泡排序,虽然它在性能上并不理想。下面是一个简单的例子: ```c #include <stdio.h> void bubbleSortRecursive(int arr[], int n) { if (n == 1) // 如果只剩下一个元素,认为它是有序的 return; // 进行一次完整的冒泡过程 for (int i = 0; i < n - 1; i++) { if (arr[i] > arr[i + 1]) { // 交换元素 int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } // 对剩余元素递归调用,直到整个数组有序 bubbleSortRecursive(arr, n - 1); } // 测试函数 int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); printf("Original array:\n"); for (int i = 0; i < n; i++) printf("%d ", arr[i]); bubbleSortRecursive(arr, n); printf("\nSorted array using recursive bubble sort:\n"); for (int i = 0; i < n; i++) printf("%d ", arr[i]); return 0; } ``` 这个递归版本的冒泡排序会在每个递归层完成一轮完整的冒泡过程,然后逐渐减少待处理的元素个数,直到只剩下1个元素,递归结束。但是请注意,这并不是一个高效的排序算法,因为它会重复很多不必要的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值