C#程序设计实验.doc
数据结构实验指导 / 实验九:排序方法的实现5数据结构实验指导实验九:排序方法的实现一、实验目的1、 掌握排序的基本概念。2、 掌握不同的排序方法。3、 掌握排序方法的比较。4、 了解排序方法的应用。二、实验学时2学时三、实验类型综合性实验四、实验需求1、硬件每位学生配备计算机一台;2、软件Windows XP/ Windows 7操作系统;开发工具软件:Microsoft Visual Studio 2010。五、实验理论与预备知识1、数据结构的基本概念2、存储结构的特点3、不同的排序方法4、排序方法的算法实现六、实验任务1、排序方法的代码实现2、编写应用程序,用相关数据验证运算算法七、实验内容及步骤任务:代码实现顺序表的创建、显示、排序;编写应用程序,用相关数据验证算法。实验步骤:(1) 启动Visual Studio 2010,创建窗体应用程序。(2) 创建顺序表的存储结构,包括创建、显示、直接插入排序、快速排序、直接选择排序等方法,代码参考如下: struct RecType public int key; public string data; ; class InterSortClass const int MaxSize = 10000; public RecType R; public int length; string sstr; public InterSortClass() R = new RecTypeMaxSize; length = 0; h = new RadixNode(); /-顺序表的基本运算和排序算法- public void CreateList(string split) int i; for (i = 0; i < split.Length; i+) Ri.key = Convert.ToInt16(spliti); length = i; public string DispList() /将顺序表L中的所有元素构成一个字符串返回 int i; if (length > 0) string mystr = R0.key.ToString(); for (i = 1; i < length; i+) /扫描顺序表中各元素值 mystr += " " + Ri.key.ToString(); return mystr; else return "空串" /-各种排序算法- public string InsertSort() /对R0.n-1按递增有序进行直接插入排序 int i, j; string mystr = "" RecType tmp; for (i = 1; i < length; i+) mystr += "i=" + i.ToString() + ": " tmp = Ri; j = i - 1; /从右向左在有序区R0.i-1中找Ri的插入位置 while (j >= 0 && Rj.key > tmp.key) Rj + 1 = Rj; /将关键字大于Ri.key的元素后移 j-; Rj + 1 = tmp; /在j+1处插入Ri for (int k = 0; k < length; k+) mystr += Rk.key.ToString() + " " mystr += "rn" return mystr; public string QuickSort() /对R0.n-1的元素按递增进行快速排序 sstr = "" QuickSort1(0, length - 1); return sstr; private void QuickSort1(int s, int t) /对Rs.t的元素进行快速排序 int i = s, j = t; RecType tmp; if (s < t) /区间内至少存在两个元素的情况 sstr += "R" + s.ToString() + "." + t.ToString() + "区间排序: " tmp = Rs; /用区间的第1个元素作为基准 while (i != j) /从区间两端交替向中间扫描,直至i=j为止 while (j > i && Rj.key >= tmp.key) j-; Ri = Rj; while (i < j && Ri.key <= tmp.key) i+; Rj = Ri; Ri = tmp; for (int k = 0; k < length; k+) sstr += Rk.key.ToString() + " " sstr += "rn" QuickSort1(s, i - 1); /对左区间递归排序 QuickSort1(i + 1, t); /对右区间递归排序 public string SelectSort() /直接选择排序 int i, j, min; string mystr = "" RecType tmp; for (i = 0; i < length - 1; i+)/做第i趟排序 mystr += "i=" + i.ToString() + ": " min = i; for (j = i + 1; j < length; j+) if (Rj.key < Rmin.key) min = j; /min记下目前找到的最小关键字所在的位置 if (min != i) /交换Ri和Rmin tmp = Ri; Ri = Rmin; Rmin = tmp; for (int k = 0; k < length; k+) mystr += Rk.key.ToString() + " " mystr += "rn" return mystr; (3) 创建窗体应用程序,调用不同的排序方法,显示出排序过程,界面参考如下: (4) 调试运行,并观察运行情况。八、实验分析1、 分析程序的运行过程,并将核心代码、错误提示及纠错内容记录至实验报告册;2、 不同的排序方法;3、 不同排序方法的比较。九、课外自主实验1、编写希尔排序、堆排序、基数排序的代码,并通过应用程序调试运行。管理科学与工程学科 / 共5页,第5页