实验七 排序方法的综合实现
一、实验目的
1.掌握各种排序方法的基本思想、排序过程、算法实现,能进行时间和空间性能的分析,根据实际问题的特点和要求选择合适的排序方法。
2.学会比较各种排序方法的稳定性分析以及在最好、最坏和平均情况的时间性能分析。
二、实验环境
⒈ 硬件:每个学生需配备计算机一台。操作系统: Windows;
⒉ 软件: Windows操作系统+ MYEPLIPS;
三、实验要求及实验内容
1.采用顺序表实现直接插入排序、简单选择排序、冒泡排序、快速排序算法。
2.采用链表实现直接插入排序、简单选择排序。
3. 比较各种算法的运行速度。
4. 输入数据:数据域(data)设定为整型。以关键字序列(265,301,751,129,937,863,742,694,76,438)作为输入数据,采用上述方法进行排序。
实现程序
1.SqListSortClass.java
class RecType{//顺序表元素类型
int key;
String data;
public RecType(int d){
key=d;
}
}
public class SqListSortClass {
final int MAXN=100;
RecType[] R;
int n;
public void CreateR(int[] a){//由关键字序列a构造顺序
R=new RecType[MAXN];
for (int i=0;i<a.length;i++){
R[i]=new RecType(a[i]);
}
n=a.length;
}
public void Disp(){//输出顺序表
for (int i=0;i<n;i++){
System.out.print(R[i].key+" ");
}
System.out.println();
}
public void swap(int i,int j){
RecType tmp=R[i];
R[i]=R[j];
R[j]=tmp;
}
public void InserSort(){
RecType tmp;
int j;
for(int i=1;i<n;i++){
if (R[i].key<R[i-1].key){
tmp=R[i];
j=i-1;
do {
R[j+1]=R[j];
} while (j>=0 && R[j].key>tmp.key);
R[j+1]=tmp;
}
}
}
public void BubbleSort(){ //对R[e.n-1]按递增有序进行冒泡排序
boolean exchange=false;
for (int i=0;i<n-1;i++){
exchange=false;
for (int j=n-1;j>i;j--){
if (R[j].key<R[j-1].key){
swap(j,j-1);
exchange=true;
}
}
if (!exchange){
return;
}
}
}
public int Partition(int s,int t){//划分算法
RecType base=R[s];//以表首元素为基准
int i=s,j=t;
while (i<j){
while (i<j&&R[j].key>base.key){
j--;
}
swap(i,j);
while (i<j&&R[i].key>base.key){
i++;
}
swap(i,j);
}
return i;
}
public void QuickSort(){
Quicksort1(0,n-1);
}
public void Quicksort1(int s,int t){
if (s<t){
int i=Partition(s,t);
Quicksort1(s,i=1);
Quicksort1(i+1,t);
}
}
public void SelectSort(){
RecType tmp;
for (int i=0;i<n-1;i++){
int minj=i;
for (int j=i+1;j<n;j++){
if (R[j].key<R[minj].key){
minj=j;
}
}
if (minj!=i){
swap(i,minj);
}
}
}
}
2.test.java
public class test {
public static void main (String args[]){
int b[]={1,2,3,4,5};
SqListSortClass xx=new SqListSortClass();
xx.CreateR(b);
System.out.println("the table is");
xx.Disp();
System.out.println("插入排序后是");
xx.Disp();
xx.InserSort();
int c[]={88,77,66,55,44};
xx.CreateR(c);
System.out.println("the table is");
xx.Disp();
xx.InserSort();
System.out.println("直接插入排序后");
xx.Disp();
int d[]={33,21,15,76,93};
xx.CreateR(d);
System.out.println("the table is");
xx.Disp();
xx.BubbleSort();
System.out.println("冒泡排序后");
xx.Disp();
int e[]={45,72,12,3,6,87};
xx.CreateR(e);
System.out.println("the table is");
xx.Disp();
xx.SelectSort();
System.out.println("选择排序后");
xx.Disp();
int f[]={23,33,54,11,4};
xx.CreateR(f);
System.out.println("the table is");
xx.Disp();
xx.QuickSort();
System.out.println("快速排序后");
xx.Disp();
}
}
运行结果
测试
通过!
四、报告要求
1.报告要求用专门的实验报告纸书写,字迹清晰,格式规范。
2.报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验要求。
3.报告中应书写源程序,且源程序中要有注释。
4.报告中应包含运行结果及结果分析。如调试通过,请注明‘通过’并写出输入的数据及运行结果;如未调试通过或结果不正确,试分析原因。
5.报告最后包含实验总结和体会。
五、对综合性实验的说明
实验七是一个综合性的实验,综合了直接插入排序、简单选择排序、快速排序等多种排序等多个知识点,以及顺序和链式两种存储结构的设计及操作的实现。