51单片机循环程序实验

一、实验内容

1.基本要求

掌握排序算法;实现对五个字节数据(初值为本人班级学号后五位,每一位填入一个字节中)从大到小排序;

2.扩展要求

实现两种不同的排序算法,并比较各自的排序效率;

3.思考要求

思考是否可以实现快速排序,该怎样实现。

二.理论分析或算法分析

设置数据为  5  4  2  2  7

假设内部数据30H:  5  4  2  2  7

首先要确认怎么排序,有两种算法;

第一种是直接排序法:

(1)刚开始内部数据30H存放了5 4 2 2 7五个字节的数据,从大到小排序,先取出第一个数,假设它是最大数,从第二个数据直到最后一个数据开始比较,直到结束,第一个数和第二个数比较,假设成立,那么第一个数还是原来的数,让现在的第一个数与第三个数进行比较,如果成立则不换位置,如果假设不成立则进行换位置,写到第一个的位置,那么第一次的比较就成为7 4 2 2 5;

(2)第二次从第二个字节开始,取出第二个数为后四个的最大数,4  和  2比较,假设成立,则不进行交换位置,然后4  和  2 进行比较,假设成立,不进行交换位置,  接下来,4和7进行比较,假设不成立,进行交换位置,第二次比较的结果为7 2 2 4;

(3)第三次进行比较,假设2是最大数,然后2 和 2进行比较, 假设成立,不交换位置,接下来2 和 4进行比较,假设不成立,则交换位置,第三次比较的结果为 4  2  2;

(4)第四次进行比较,假设2 为最大数,2 与2进行比较,最后比较结果为 2  2;

(5)最后一个字节2不需要进行比较,最后的排序为7 5 4 2 2。

因为本人学号为54227所以设置内部数据为以下:

内部数据30H:  5  4  2  2  7

                           7  4  2  2  5

                               5  2  2  4

                                   4  2  2

                                       2  2

                                           2

第二种是冒泡排序法:

(1)首先5 和 4 进行比较,如果后面是最小数,则假设成立,不进行交换,否则进行交换,4是小的数,不进行交换,4  和  2进行比较,2是小的数,不进行交换,2和2进行比较,是相等,不是小的数,不进行交换,2和7进行比较,2是小的数,进行交换,第一次排序的结果为5 4 2 7 2;

(2)5和4满足排序规则,不进行交换,4和2满足排序规则,不进行交换,2和7不满足排序规则,进行交换,第二次排序的结果为5  4  7  2;

(3)5和4进行比较,满足排序规则,不进行交换,4和7进行比较,不满足排序规则,进行交换,第三次排序结果为 5  7  4;

(4)5和7进行比较,不满足排序规则,进行交换,第四次排序结果为7 5;

(5)最后一次不需要进行比较,最后的排序为7 5 4 2 2。

内部数据30H:5  4  2  2  7

                        5  4  2  7  2

                        5  4  7  2

                        5  7  4

                        7  5

                        7

三.实现方法

使用寄存器间接寻址;

源代码

直接排序代码:

51单片机循环程序实验_第1张图片

四.实验结果分析

执行结果验证:输入五个数据5 4  2  2  7

执行前的结果

51单片机循环程序实验_第2张图片

51单片机循环程序实验_第3张图片

测试过程

51单片机循环程序实验_第4张图片

执行后的结果

51单片机循环程序实验_第5张图片

五.结论

直接排序法是从大到小排序,找到最大数放在第一个位置;而冒泡排序法是从小到大排序,找到最小数放在最后一个位置。冒泡排序比直接排序更优,因为冒泡排序最后的几位已经拍好序,可以提前结束。

   在本次实验中,学会了如何进行排序,复习了两种排序算法,进一步巩固了自己所学的基础知识。要多多进行思考,在以前学过的算法中,对算法有所遗忘,所以,进行多多练习,可以孰能生巧。

思考题:思考是否可以实现快速排序,该怎样实现。

可以实现快速排序,在实现中,首先取数据区的一个数据进行参照,然后从数据区中按顺序与参照数据进行对比,比它小的放到它位置的前面,比它大的数据放到它的后面,然后再按这个思路进行它左边数据的排序和右边数据的排序,进行循环,直到左右数据剩下一个数据为止。

你可能感兴趣的:(51单片机实验,51单片机,嵌入式硬件,单片机)