本节将主要介绍选择排序算法的原理及其具体的实现方法。
选择排序算法是一种简单且直观的排序算法,它的工作原理是:
(1)在未排序序列中找到最小(大)元素,将其存放到排序序列的起始位置;
(2)从剩余未排序元素中继续寻找最小(大)元素,将其放到已排序序列的末尾;
(3)以此类推,直到所有元素均排序完毕。
选择排序算法的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序算法每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素进行排序总共进行至多 n -1次交换。
本节将介绍如何在LoongIDE软件工具中使用C语言实现选择排序算法。具体的实现步骤如下所示。
(1)启动LoongIDE软件工具。
(2)在LoongIDE主界面主菜单下,选择New->NewProject Wizard…,弹出“New Project Wizard-C Project”对话框。
(3)在“New Project Wizard-C Project”对话框中按如下设置参数。
① Project Type:C Executable(通过复选框设置)。
② Project Name:example_1_1(通过文本框输入)。
注 :工程文件夹设置为“E:\loongson1B_training_example\example_1_1”。
(4)单击“Next”按钮,弹出“New Project Wizard-MCU,Toolchain&RTOS”对话框。
(5)在“New Project Wizard-MCU,Toolchain&RTOS”对话框中,按如下设置参数。
① Mcu Modal:LS1B200(LS232)。
② Tool Chain:SDE Lite4.9.2 for MIPS。
③ Using RTOS:None(bare programming)。
(6)单击“Next”按钮,弹出“New Project Wizard-Bare Program Components”对话框。
(7)在“New Project Wizard-Bare Program Components”对话框中,不勾选任何程序组件(Program Components)前面的复选框。
(8)单击“Next”按钮,弹出“New Project Wizard-New project Summary”对话框。
(9)在“New Project Wizard-New project Summary”对话框中,单击“OK”按钮,完成工程的建立。
(10)在LoongIDE主界面左侧的“Project Explorer”窗口中,找到并双击main.c文件。
(11)自动打开main.c文件,删除该文件中的main()函数,在该文件中添加如代码清单1-1所示的C语言代码。
代码清单1-1 选择排序的C语言代码
(12)保存设计文件。
本节将介绍如何对设计工程进行编译,并通过调试器对C语言设计代码进行调试。具体实现步骤如下所示。
(1)在LoongIDE主界面主菜单下,选择Project->Compile&Build,对设计进行编译和链接,生成可执行文件。
(2)使用Mini-USB电缆,将龙芯1B硬件开发平台上的USB接口与安装有LoongIDE软件工具的PC/笔记本电脑的USB接口连接起来。
(3)给龙芯1B硬件开发平台上电。
(4)如图1.1所示,在代码清单1-1中设置第一个断点。
图1.1 在代码清单1-1中设置第一个断点
(5)如图1-2所示,在代码清单1-1中设置第二个断点。
图1.2 在代码清单1-1中设置第二个断点
(6)在LoongIDE主界面主菜单下,选择Debug->Run,进入调试器界面,此时程序自动停在第一个断点处。
(7)在调试器界面中,单击“Watchs”标签。在该标签页中,单击鼠标右键,出现浮动菜单,在浮动菜单内,选择Add Watch,弹出“Add Variable Watch”对话框。
(8)在“Add Variable Watch”对话框中的文本框中输入“arr[0]”,单击“OK”按钮,退出该对话框。
(9)重复步骤(7)和(8),再添加7个变量,即arr[1]、arr[2]、arr[3]、arr[4]、arr[5]、arr[6]、arr[7]。
(10)在LoongIDE主界面主菜单下,选择Debug->Run,程序停到第二个断点处。
图1.3 “Watchs”标签页
(11)单击“Watchs”标签,即可看到如图1.3所示的“Watchs”标签页。
本节将介绍如何在LoongIDE软件中使用汇编语言实现选择排序算法。具体的实现步骤如下所示。
(1)使用LoongIDE软件打开汇编语言编写的设计工程example_1_2.lxp。
(2)在LoongIDE主界面左侧的“Project Explorer”窗口中,找到并双击bsp_start.S文件。
(3)在bsp_start.S文件中,添加如代码清单1-2所示的汇编语言代码。
代码清单1-2 在bsp_start.S文件中添加实现选择排序算法的汇编语言代码
(4)保存设计代码。
注 :读者可以定位到本书提供资源的\loongson1B_training_example\example_1_2目录中,使用LoongIDE软件工具打开example_1_2.lxp工程文件。
本节将介绍如何对前面所设计的汇编语言代码进行编译,并在龙芯1B硬件开发平台上进行调试和验证。具体的实现步骤如下所示。
(1)编译程序代码,给龙芯1B硬件开发平台上电。
(2)如图1.4所示,在代码清单1-2中设置第一个断点。
图1.4 在代码清单1-2中设置第一个断点
(3)如图1.5所示,在代码清单1-2中设置第二个断点。
图1.5 在代码清单1-2中设置第二个断点
(4)在LoongIDE主界面主菜单下,选择Debug->Run,进入调试器界面,此时程序自动停在第一个断点处。
(5)在调试器界面中,单击“CPU Registers”标签,在“CPU Registers”标签页中找到寄存器名字为“s0”的一行,并用鼠标左键双击该行,弹出“View Memory”对话框,如图1.6所示。从图1.6中可知,在数据段中开辟的一块名字为“buffer”的存储空间的首地址为0x80212508,同时也可看到从地址0x80212508开始的连续16个字节的存储位置依次显示了要排序的8个数据,即0x0003、0x0008、0x0001、0x0005、0x0002、0x0004、0x0006和0x0007。
(6)单击图1.6中的按钮图标
,退出“View Memory”对话框。
(7)在LoongIDE主界面主菜单下,选择Debug->Run,程序停到第二个断点处。
(8)在调试器界面中,单击“CPU Registers”标签,在“CPU Registers”标签页中找到寄存器名字为“s0”的一行,并用鼠标左键双击该行,弹出“View Memory”对话框页,如图1.7所示。从图1.7中可知,从地址0x80212508开始的连续16个字节的存储位置依次显示了已经排序完的8个数据,即0x0001、0x0002、0x0003、0x0004、0x0005、0x0006、0x0007和0x0008。
图1.6 “View Memory”对话框(1)
图1.7 “View Memory”对话框(2)