大数阶乘与快速排序算法(汇编)

合集下载

100个python算法实例

100个python算法实例

100个python算法实例Python算法是指用Python编写的解决问题或处理数据的方法和步骤。

Python是一种通用的、高级的编程语言,具有简单易学、可读性强、代码简洁等特点,非常适合用于编写各种算法。

下面将给出100个Python算法实例的相关参考内容,不包含任何链接。

1. 阶乘算法阶乘算法用于计算一个正整数的阶乘,即n! = n * (n-1) * ... * 2 * 1。

可以使用递归或循环的方式实现,以下是一个示例代码:```pythondef factorial(n):if n == 0:return 1else:return n * factorial(n-1)```2. 斐波那契数列算法斐波那契数列由0和1开始,后面的每一项都是前两项的和。

可以使用递归或循环的方式实现,以下是一个示例代码:```pythondef fibonacci(n):if n <= 0:return 0elif n == 1:return 1else:return fibonacci(n-1) + fibonacci(n-2)```3. 冒泡排序算法冒泡排序是一种简单的排序算法,通过不断比较相邻的两个元素并交换位置,使得最大(或最小)的元素逐渐“冒泡”到最后(或最前)。

以下是一个示例代码:```pythondef bubble_sort(lst):n = len(lst)for i in range(n - 1):for j in range(n - 1 - i):if lst[j] > lst[j + 1]:lst[j], lst[j + 1] = lst[j + 1], lst[j]return lst```4. 快速排序算法快速排序是一种高效的排序算法,通过选择一个基准元素,将小于该基准的元素移到左侧,大于该基准的元素移到右侧,然后递归地对左右两个部分进行排序。

以下是一个示例代码:```pythondef quick_sort(lst):if len(lst) <= 1:return lstelse:pivot = lst[0]less = [x for x in lst[1:] if x <= pivot]greater = [x for x in lst[1:] if x > pivot]return quick_sort(less) + [pivot] + quick_sort(greater)```5. 二分查找算法二分查找算法是一种快速查找有序列表中特定元素位置的算法,通过不断将待查找范围缩小一半的方式进行查找。

计算机考试必备公式与算法

计算机考试必备公式与算法

计算机考试必备公式与算法在计算机考试中,掌握一些基本的公式与算法是非常重要的。

这些公式与算法可以帮助我们解决各种计算机科学问题,提高解题的效率。

本文将从公式和算法两个方面来介绍一些在计算机考试中必备的内容。

一、计算机考试必备公式1. 算术运算公式在计算机编程中,我们经常需要进行各种算术运算,如加法、减法、乘法和除法。

以下是一些常用的算术运算公式:加法:a + b = c减法:a - b = c乘法:a × b = c除法:a ÷ b = c2. 平均值公式计算平均值在计算机考试中常会用到,以下是计算平均值的公式:平均值:avg = (a1 + a2 + a3 + ... + an) / n其中a1、a2、a3等为数据集中的各个数值,n为数据集的数量。

3. 阶乘公式阶乘在计算机科学中也是常用的概念,以下是阶乘的公式:n的阶乘:n! = n × (n-1) × (n-2) × ... × 1其中n为要计算阶乘的数。

4. 斐波那契数列公式斐波那契数列是一个非常经典的数列,在计算机考试中经常会考察该数列的计算。

以下是斐波那契数列的公式:第n个斐波那契数:F(n) = F(n-1) + F(n-2)其中F(1) = 1,F(2) = 1。

5. 指数幂公式指数幂在计算机科学中也是常用的,以下是指数幂的公式:a的b次方:a^b = a × a × a × ... × a (共b个a相乘)其中a为底数,b为幂。

以上是一些在计算机考试中常用的公式,掌握这些公式可以帮助我们更好地解题。

二、计算机考试必备算法除了公式外,一些常见的算法也是在计算机考试中必备的。

以下介绍几个常用的算法:1. 线性搜索算法线性搜索算法是一种简单直观的搜索算法。

它的基本思想是逐个比较待搜索的元素与目标元素,直到找到匹配或搜索完所有元素。

2. 二分搜索算法二分搜索算法是一种高效的搜索算法,适用于已排序的数据集。

精选10个汇编语言程序案例集

精选10个汇编语言程序案例集

精选10个汇编语言程序案例集汇编语言是一种底层编程语言,直接操作计算机硬件。

在学习和研究计算机体系结构、编程理论以及进行低级优化等方面,汇编语言是非常重要的。

下面精选了一些汇编语言程序案例,以帮助初学者更好地理解和熟悉汇编语言。

1.程序:计算数组平均值这个程序接收一个包含n个整数的数组,并计算它们的平均值。

汇编语言的优势在于可以直接访问内存,并能够快速处理数据。

2.程序:反转字符串这个程序接收一个字符串作为输入,并将其反转。

使用循环和指针操作,可以高效地实现字符串的反转。

3.程序:求阶乘这个程序接收一个输入的正整数,并计算其阶乘。

使用循环和递归的方式,可以轻松实现阶乘的计算。

4.程序:排序算法实现这个程序实现了一些常见的排序算法,例如冒泡排序、插入排序和快速排序。

通过对数据进行比较和交换,可以实现对数组中元素的排序。

5.程序:查找算法实现这个程序实现了一些常见的查找算法,例如线性查找和二分查找。

通过对数组进行比较和分割,可以高效地实现对元素的查找。

6.程序:矩阵乘法这个程序接收两个矩阵作为输入,并计算它们的乘积。

通过使用循环和指针操作,可以高效地实现矩阵乘法。

7.程序:加密解密算法这个程序实现了一些加密解密算法,例如凯撒密码和DES算法。

通过对数据进行位操作和逻辑运算,可以实现对数据的加密和解密。

8.程序:图像处理算法这个程序实现了一些简单的图像处理算法,例如灰度化、边缘检测和图像缩放。

通过对像素进行操作和计算,可以实现对图像的处理。

9.程序:计算斐波那契数列这个程序接收一个输入的正整数,并计算对应位置的斐波那契数。

通过使用循环和递归的方式,可以高效地实现斐波那契数列的计算。

10.程序:位操作这个程序演示了一些常见的位操作,例如与、或、异或以及位移操作。

通过对数据进行位操作,可以实现对数据的处理和优化。

以上这些程序案例展示了汇编语言的一些基本应用和实现方式,通过学习和编写这些程序,可以更好地理解汇编语言的原理和编程技巧。

阶乘的快速计算方法

阶乘的快速计算方法

阶乘的快速计算方法阶乘是数学中一个非常重要的概念,它在组合数学、概率论等领域有着广泛的应用。

然而,当阶乘的数值非常大时,传统的计算方法往往会因为计算量太大而变得非常耗时。

为了解决这个问题,人们提出了一系列快速计算阶乘的方法。

一、基于递归的快速计算方法递归是一种非常常见的计算方法,它可以将一个大问题分解成若干个小问题,然后通过解决小问题来解决大问题。

对于阶乘来说,我们可以使用递归的方法来计算。

具体而言,我们可以将阶乘分解为两个部分:首先计算阶乘数n的一半,然后将结果平方得到n的阶乘。

这样,我们就可以通过递归的方式来计算阶乘。

二、基于迭代的快速计算方法除了递归,迭代也是一种常见的计算方法。

与递归不同,迭代是通过循环来实现计算的过程。

对于阶乘来说,我们可以使用迭代的方法来计算。

具体而言,我们可以使用一个循环来计算阶乘。

首先,我们将阶乘的初始值设为1,然后通过循环不断将当前值乘以下一个数,直到计算到n为止。

这样,我们就可以通过迭代的方式来计算阶乘。

三、基于公式的快速计算方法除了递归和迭代,还有一种基于公式的快速计算阶乘的方法。

这种方法通过使用数学公式来计算阶乘,从而减少计算的复杂度。

具体而言,我们可以使用斯特林公式来计算阶乘的近似值。

斯特林公式是一个近似计算阶乘的公式,它可以通过对数函数的性质来简化阶乘的计算。

使用斯特林公式,我们可以将阶乘的计算复杂度从O(n)降低到O(log n)。

四、基于查表的快速计算方法除了以上三种方法,还有一种基于查表的快速计算阶乘的方法。

这种方法通过预先计算并保存阶乘的结果,然后在需要计算阶乘时直接查表获取结果,从而减少计算的时间。

具体而言,我们可以使用动态规划的方法来计算并保存阶乘的结果。

首先,我们将阶乘的初始值设为1,并将其保存在一个表中。

然后,通过循环计算并保存每个数的阶乘结果,直到计算到n为止。

这样,当需要计算阶乘时,我们只需要从表中查找结果,而不需要重新计算。

总结起来,阶乘的快速计算方法有基于递归、迭代、公式和查表等多种方式。

C语言常用算法程序汇总

C语言常用算法程序汇总

C语言常用算法程序汇总C语言是一门广泛应用于计算机编程的语言,具有较高的效率和灵活性。

在C语言中,常见的算法程序包括排序算法、查找算法、递归算法等等。

以下是一些常用的C语言算法程序的汇总:1.排序算法:-冒泡排序:通过多次迭代比较相邻元素并交换位置,将最大的元素逐渐移动到正确的位置。

-插入排序:将待排序的元素与已排序的部分依次比较并插入到正确的位置。

-选择排序:每次从待排序的元素中选择最小的元素并与已排序的部分交换位置。

-快速排序:通过选择一个基准元素,将数组划分为两个子数组进行递归排序。

2.查找算法:-顺序查找:逐个比较数组中的元素,直到找到目标元素或到数组末尾。

-二分查找:通过比较目标元素与数组中间元素的大小,逐步缩小范围,直到找到目标元素。

-哈希查找:通过散列函数将目标元素映射到哈希表的索引位置进行查找。

3.递归算法:-阶乘:通过递归调用自身计算一个正整数的阶乘。

-斐波那契数列:通过递归调用自身计算斐波那契数列的第n个数。

-二叉树遍历:通过递归调用自身遍历二叉树的各个节点。

4.图算法:- 最短路径算法:如Dijkstra算法和Floyd算法,用于计算图中两个节点之间的最短路径。

-拓扑排序:通过对有向无环图进行排序,使得所有的边从排在前面的节点指向排在后面的节点。

- 最小生成树:如Prim算法和Kruskal算法,用于找到图中连接所有节点的最小子树。

5.动态规划:-最长公共子序列:通过寻找两个字符串中的最长公共子序列,解决字符串匹配问题。

-背包问题:通过动态规划解决在给定容量下选取物品使得总价值最大的问题。

-最大子序列和:通过动态规划解决一个数组中选取连续子序列使得和最大的问题。

以上只是一些C语言中常用的算法程序的汇总,实际上,还有很多其他的算法,如逆波兰表达式、霍夫曼编码、最小割等等。

通过学习这些算法,可以更好地理解C语言的应用和开发。

C语言常用简单算法

C语言常用简单算法

C语言常用简单算法C语言是一门功能强大的编程语言,其算法也是很多的。

下面是一些常用的简单算法:1.二分查找算法:二分查找是一种在有序数组中查找特定元素的算法。

它的基本思想是首先在数组的中间位置找到待查找的元素,如果该元素等于目标值,则查找成功;如果该元素大于目标值,说明目标值在数组的前半部分,则在前半部分继续进行查找;如果该元素小于目标值,则说明目标值在数组的后半部分,则在后半部分继续进行查找。

重复以上步骤,直到找到目标值或者确定目标值不存在。

2.冒泡排序算法:冒泡排序是一种简单直观的排序算法。

它的基本思想是通过反复交换相邻的两个元素,将较大的元素逐渐往后移动,从而实现排序的目的。

具体实现时,每一轮比较都会使最大的元素移动到最后。

3.插入排序算法:插入排序是一种简单直观的排序算法。

它的基本思想是将数组分成已排序部分和未排序部分,每次从未排序部分取出一个元素,然后将该元素插入到已排序部分的合适位置,从而实现排序的目的。

4.选择排序算法:选择排序是一种简单直观的排序算法。

它的基本思想是每次选择一个最小(或最大)的元素放到已排序部分的末尾,从而实现排序的目的。

具体实现时,每一轮选择都通过比较找出未排序部分的最小(或最大)元素。

5.快速排序算法:快速排序是一种高效的排序算法。

它的基本思想是通过选取一个基准元素,将数组分成两个子数组,一个子数组中的元素都小于基准元素,另一个子数组中的元素都大于基准元素,然后对这两个子数组分别进行快速排序,最终实现排序的目的。

6.斐波那契数列算法:斐波那契数列是一列数字,其中每个数字都是前两个数字之和。

常见的斐波那契数列算法有递归算法和迭代算法。

递归算法通过反复调用自身来计算斐波那契数列的值,而迭代算法则通过循环来计算。

7.求最大公约数算法:求两个数的最大公约数是一种常见的问题。

常见的求最大公约数的算法有欧几里得算法和辗转相除法。

欧几里得算法通过不断用较小数除以较大数的余数,直到余数为0,得到最大公约数。

阶乘的运算方法

阶乘的运算方法

阶乘的运算方法阶乘是数学中常见的一种运算方法,也是计算机科学中常用的一种算法。

它的定义如下:对于任意正整数n,它的阶乘n!定义为从1到n之间所有正整数的乘积,即n! = 1 × 2 × 3 × … × n。

在计算机科学中,阶乘是一种常见的递归算法。

下面我们来介绍一下阶乘的计算方法。

1. 递归计算阶乘的递归计算方法是最常见的一种方法。

我们可以通过递归函数来实现。

递归函数的定义如下:```int factorial(int n) {if (n == 0) return 1; // 0的阶乘为1else return n * factorial(n - 1); // 递归计算n的阶乘}```递归计算方法的思路是,首先判断n是否为0。

如果n为0,则返回1。

如果n不为0,则递归调用factorial(n-1)来计算n-1的阶乘,然后再将结果乘以n,即可得到n的阶乘。

这种递归方法的优点是代码简单易懂,但是缺点是当n比较大时,会导致递归层数过多,从而占用大量的堆栈空间,可能会导致堆栈溢出。

2. 循环计算为了避免递归层数过多导致的堆栈溢出问题,我们可以使用循环计算的方法来计算阶乘。

循环计算的思路是,从1开始循环乘以每一个正整数,并将结果保存在一个变量中,最终得到n的阶乘。

循环计算方法的代码如下:```int factorial(int n) {int result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;}```这种方法的优点是不会出现递归层数过多的问题,但是缺点是代码稍微有些繁琐。

3. 高精度计算当n比较大时,阶乘的结果很容易就超出了计算机能够表示的范围。

为了解决这个问题,我们可以使用高精度计算的方法来计算阶乘。

高精度计算的思路是,将数的每一位存储在一个数组中,并使用数组来模拟加、减、乘、除等基本运算。

快速排序讲解

快速排序讲解

快速排序讲解快速排序是一种常用的排序算法,其核心思想是分治和递归。

它的算法复杂度为O(nlogn),在大多数情况下具有较好的性能。

快速排序的过程可以简单概括为以下几个步骤:1. 选择基准元素:从待排序序列中选择一个元素作为基准元素,一般选择第一个或最后一个元素。

2. 分割操作:将待排序序列划分为两个子序列,使得左子序列中的元素都小于基准元素,右子序列中的元素都大于或等于基准元素。

这个过程又称为分区操作。

3. 递归排序:对左右两个子序列分别进行快速排序,直到所有的子序列都有序。

4. 合并操作:将左子序列、基准元素和右子序列合并为一个有序序列。

下面以一个示例来说明快速排序的具体过程。

假设有一个待排序序列[5, 2, 9, 3, 7, 6],我们选择第一个元素5作为基准元素。

我们从序列的第二个元素开始,依次与基准元素进行比较。

如果比基准元素小,则将该元素放在左边,否则放在右边。

在本例中,2小于5,所以将2放在左边;9大于5,所以将9放在右边;3小于5,所以将3放在左边;7大于5,所以将7放在右边;6大于5,所以将6放在右边。

此时,序列变为[2, 3, 5, 7, 6, 9]。

然后,我们进一步对左右两个子序列[2, 3]和[7, 6, 9]进行快速排序。

对于子序列[2, 3],我们选择2作为基准元素。

由于只有两个元素,无需再次分割,直接排好序即可。

对于子序列[7, 6, 9],我们选择7作为基准元素。

同样地,我们将小于7的元素放在左边,大于7的元素放在右边。

最终得到子序列[6, 7, 9]。

我们将左子序列[2, 3]、基准元素5和右子序列[6, 7, 9]合并起来,得到最终的有序序列[2, 3, 5, 6, 7, 9]。

通过以上步骤,我们完成了对待排序序列的快速排序。

快速排序的优点是原地排序,不需要额外的存储空间;在大多数情况下,它的性能优于其他常用的排序算法,如冒泡排序和插入排序。

然而,快速排序也有一些缺点,最主要的是对于已经有序的序列,它的性能会大打折扣,甚至退化到O(n^2)的时间复杂度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理课程设计说明书设计题目:大数阶乘与排序专业班级学生指导教师2014 年春季学期目录目录 (1)一.课设目的与要求 (2)1.课设目的 (2)2.题目要求 (2)二.基本原理 (2)1.大数阶乘原理设计 (2)2.排序原理设计 (2)三.架构设计 (2)四.方案实现与测试 (3)五.分析总结 (9)六.参考文献 (9)一.课设目的与要求1.课设目的:检验和提高学生在汇编语言程序设计,微机原理与接口应用方面分析问题与解决问题的能力2.题目要求:1).要求实现用汇编语言编写设计一个求解大数的阶乘精确值的程序;采用字节型数组存放阶乘结果的每个数字位,采用逐位相乘,再对每一位规格化来实现;输出结成结果的位数及尾零的个数。

2).用汇编语言编写设计快速排序与希尔排序程序,注意合理使用堆栈,以避免堆栈溢出,进一步动态显示排序过程。

二.基本原理1.大数阶乘原理设计:我们在处理一个大于一定范围的数的阶乘时,无论使用什么类型去保存运算结果都必然会发生溢出,这势必会导致运算结果出错。

使用数组来模拟数字,这样无论结果数字有多大,只要数组的长度够长就能表示出来,用这个办法可以进行大数据的运算。

2.排序原理设计:快速排序原理:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。

三.架构设计核心思想就是把计算结果每一位上的数字保存到一个数组成员中,例如:把112保存至数组中,保存结果应该是result[0] 2result[1] 1result[2] 1把整个数组看成一个数字,这个数字和一个数相乘的时候,需要每一位都和这个乘数进行相乘运算还需要把前一为的进位加上。

运算方法和小学数学是一样的,乘积的个位是当前位上应该表示的数字,10位以上的需要进位。

因为乘数不可能大于10000,所以乘数和一个小于10的书相乘的时候不会大于100000,再加上前一位的进位用一个int型数据来保持这个结果就没有问题。

写法如下:int 结果= result[x] * 乘数+ 进位;每一位的计算结果有了,把这个结果的个位数拿出来放到这个数组元素上:result[x] = 结果%10;接下来的工作就是计算出进位:进位= 结果/ 10;这样一位一位的把整个数组计算一遍,最后可能还有进位,用同样的方法,把进位的数值拆成单个数字,放到相应的数组元素中。

最后输出一下结果,从最高位吧数字打印一遍就OK了。

一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i];4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]赋给A[j];5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。

找到符合条件的值,进行交换的时候i, j指针位置不变。

另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

希尔排序原理:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。

所有距离为d1的倍数的记录放在同一个组中。

先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止四.方案实现与测试大数阶乘源代码:include io32.inc.datainfoMsg byte '请输入你要求的阶乘',13,10,0errorMsg byte '你输入的数小于0',13,10,0account byte '阶乘的位数为:',13,10,0zeroaccount byte '尾零的个数为:',13,10,0inputnum dword 0bufferNum dword 100000 dup (0),0temp dword 0arrayNum dword 1carry dword 0.codestart:mov eax,1mov bufferNum[0],eaxmov eax,offset infoMsgcall dispmsgcall readsidmov inputnum ,eaxcmp eax,0jl DONE;输入的数小于0;输入的数不小于0mov ebx,2OUTER:cmp ebx,inputnumjg FINISH;完成计算外层循环用ebxmov ecx,1mov eax,0mov carry,eaxFLAG1:cmp ecx,arrayNumjg OUTIN;大于1跳出内循环内层循环用ecxmov eax,ebxmul bufferNum[ecx*4-4]add eax,carryadc edx,0;还要加进位标志,也就是说加了上一步的进位push ebxmov ebx,0ahdiv ebxpop ebxmov bufferNum[ecx*4-4],edxmov carry,eaxinc ecxjmp FLAG1OUTIN:cmp carry,0jz FLAG2mov eax,1add arrayNum,eax;所用到的数组的个数mov edx,0mov eax,carrypush ebxmov ebx,0ahdiv ebxpop ebxpush edxmov eax,arrayNumpush ebxmov ebx,04hmul ebxpop ebxsub eax,4pop edxmov bufferNum[eax],edx;保存余数到数组mov edx,0mov eax,carrypush ebxmov ebx,0ahdiv ebxpop ebxmov carry,eaxjmp OUTIN ;循环保存余数直到进位只剩个位FLAG2:inc ebxjmp OUTERFINISH:;输出结果mov ecx,arrayNumFLAG3:cmp ecx,0jle OVERmov eax,bufferNum[ecx*4-4]call dispsidmov eax,0dec ecxjmp FLAG3DONE:cmp edi,0je OVERmov eax,offset errorMsgcall dispmsgOVER:call dispcrlfMOV eax,offset accountcall dispmsgMOV eax,arrayNumcall dispuidcall dispcrlfmov ecx,1mov edi,0zero:mov eax,bufferNum[ecx*4-4]cmp eax,0jne F0inc ediinc ecxcmp ecx,arrayNumjge F0jmp zeroF0:MOV eax,offset zeroaccountcall dispmsgmov eax,edicall dispuidcall dispcrlfexit 0end start快速排序源代码:include io32.incincludelib msvcrt.lib ;这里是引入类库相当于 #include了 printf PROTO C :PTR DWORD, :VARARG ;声明一下我们要用的函数头MAXSIZE =1000.datacount dword 0arrBytes DWORD MAXSIZE dup (0)szFormat BYTE " %d", 09h, 0szFormat1 BYTE 0ah, 0 ;换行in_msg byte '请输入排序数据(-1 结束)',10,13,0out_msg byte '快速(降序)排序结果如下:',10,13,0notice byte '.........testing........',10,13,0.codedumparray PROC array:PTR DWORD, arrsize:DWORDmov eax,offset noticecall dispmsgmov EBX, offset arrBytesmov ECX, arrsizexor ESI, ESITag1:push ecxINVOKE printf, OFFSET szFormat, DWORD PTR [EBX+ESI] pop ecxadd ESI, 4LOOP Tag1INVOKE printf, OFFSET szFormat1RETdumparray ENDPreadInArray proc pCount:DWORDxor ebx,ebxmov eax,offset in_msgcall dispmsgxor eax,eaxcall readsidcmp eax,0jl DONEmov arrBytes[4*ebx],eaxinc ebxjmp againDONE:mov count,ebxretreadInArray endpqsort PROC array:PTR DWORD, lowitem:DWORD, highitem:DWORD LOCAL pivot:DWORD ;定义局部变量MOV EBX, arrayMOV EDX, lowitemMOV ESI, lowitemMOV EDI, highitemCMP ESI, EDIJGE TagEndMOV EAX, DWORD PTR [EBX+EDX*4]MOV pivot, EAXMOV EAX, EDISUB EAX, ESIMOV ECX, EAXINC EDXTag1:MOV EAX, pivotCMP EAX, DWORD PTR [EBX+EDX*4]JL Tag2JMP Tag3Tag2:MOV EAX, DWORD PTR [EBX+EDX*4]XCHG EAX, DWORD PTR [EBX+ESI*4+4]MOV DWORD PTR [EBX+EDX*4], EAXMOV EAX, DWORD PTR [EBX+ESI*4]XCHG EAX, DWORD PTR [EBX+ESI*4+4]MOV DWORD PTR [EBX+ESI*4], EAXINC ESIINC EDXLOOP Tag1DEC ESIPUSH ESIINVOKE qsort, array, lowitem, ESIPOP ESIINC ESIINC ESIINVOKE qsort, array, ESI, highitemTagEnd:RETqsort ENDPmain :invoke readInArray ,addr countxor eax,eaxINVOKE dumparray, ADDR arrBytes, count MOV EAX, countDEC EAXINVOKE qsort, ADDR arrBytes, 0, EAXmov eax,offset out_msgcall dispmsgINVOKE dumparray, ADDR arrBytes, count RETend main大数阶乘测试结果截图:快速排序测试结果截图:五.分析总结经过了一周的努力,我们终于完成本次课设任务。

相关文档
最新文档