Java教程

数据结构与算法实验2——排序算法

本文主要是介绍数据结构与算法实验2——排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.实验内容

用任意一种排序方式给出n个整数按升序排序后的结果,满足以下要求:

1.不得使用与实验相关的STL;

2.需使用类模版(template<class T>);

3.需定义排序类,封装各排序方法;

4.排序数据需使用动态数组存储;

5.排序类需提供以下操作:名次排序、及时终止的选择排序、及时终止的冒泡排序、插入排序。

2.测试结果

输入:

5

2 4 3 5 1

输出:

1 2 3 4 5

3.源代码

#include<iostream>

using namespace std;

template<class T>

class order

{

private:

int num;

public:

order(int n)

{

if(n<0) num=0;

else num=n;

}

~order()

{

}

//以下"名次"表示从小到大的名次

void swap(T &x,T &y)

//交换函数,将两个变量的值交换

{

int temp=x;

x=y;

y=temp;

}

void compare(T *a,int n,int *r)

//比较函数,计算数组a中每个元素的名次,将名次存入数组r中

{

int i,j;

for(i=0;i<n;i++)

{

int k=0;

for(j=0;j<n;j++) if((j<i&&a[j]==a[i])||a[j]<a[i]) k++;

//计算比a[i]小或者与a[i]相等但在a[i]左侧的元素个数并记入k

r[i]=k;

//将名次k赋值给r[i]

}

}

void makeOrder1(T *a,int n)

//名次排序,数组a记录n个元素

{

int *r=new int[n];

compare(a,n,r);

//用数组r记录n个元素的名次

T *b=new T[n];

int i;

for(i=0;i<n;i++) b[r[i]]=a[i];

//将元素按顺序记录在数组b中

for(i=0;i<n;i++) a[i]=b[i];

//将元素按顺序转存在数组a中

delete []b;

delete []r;

}

void makeOrder2(T *a,int n)

//及时终止的选择排序,数组a记录n个元素

{

bool sorted=false;

//数组为无序状态

for(int size=n;!sorted&&(size>1);size--)

//size为参与本次选择排序的元素个数,若sorted值为1,则顺序已排好,循环终止

{

int indexOfMax=0;

//从第1个元素开始比较

sorted=true;

//假定已经排好序

for(int i=1;i<size;i++)

if(a[indexOfMax]<=a[i]) indexOfMax=i;

//若顺序正确,将最大值坐标后移

else sorted=false;

//没有排好序

swap(a[indexOfMax],a[size-1]);

//将最大值移动到size个元素的最右边

}

}

bool bubble(T *a,int n)

//冒泡函数,对n个元素进行第一次冒泡,并返回此次冒泡过程中是否发生交换

{

bool swapped=false;

//未发生交换

for(int i=0;i<n-1;i++)

//将n个元素的最大值移动至最右边

if(a[i]>a[i+1])

{

swap(a[i],a[i+1]);

//交换两个元素

swapped=true;

//已发生交换

}

return swapped;

}

void makeOrder3(T *a,int n)

//及时终止的冒泡排序,数组a记录n个元素

{

for(int i=n;i>1&&bubble(a,i);i--);

//若未发生元素移动,则bubble值为0,顺序已排好,循环终止

}

void makeOrder4(T *a,int n)

//插入排序,数组a记录n个元素

{

int i;

for(i=1;i<n;i++)

//从第2个元素开始,向其左边元素已经完成排序的序列插入这个元素

{

T t=a[i];

int j;

for(j=i-1;j>=0&&t<a[j];j--) a[j+1]=a[j];

a[j+1]=t;

}

}

这篇关于数据结构与算法实验2——排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!