您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验八 排序(希尔排序,双向起泡排序)

2018-02-06 22:21 381 查看
一、 实验目的

1. 熟悉各种内部排序算法

2. 能够编写程序显示排序过程中各趟排序的结果

3. 能够编写一些排序的算法

二、 实验内容

1. 采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果。

#include<iostream>
using namespace std;

void shellsort(int r[],int n)//希尔排序
{
int i,j,d,k=0;
for(d=n/2;d>=1;d=d/2)
{
k++;
for(i=d+1;i<=n;i++)
{
r[0]=r[i];
for(j=i-d;j>0&&r[0]<r[j];j=j-d)
r[j+d]=r[j];
r[j+d]=r[0];
}
cout<<"第"<<k<<"次排序";
for(i=1;i<=n;i++)
cout<<r[i]<<" ";
cout<<endl;
}
}

int main()
{
int a[11]={0,61,19,18,42,105,45,26,81,16,25};//输入测试数据
cout<<"原始数据";
f
4000
or(int i=1;i<=10;i++)cout<<a[i]<<" ";
cout<<endl;
shellsort(a,10);

return 0;
}


2. 编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果。

#include<iostream>
using namespace std;

void print(int a[],int n)   //显示数组每一个元素
{
int i;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}

void swap(int & m,int & n) //交换两个数
{
int temp=m;
m=n;
n=temp;
}

void sbubsort(int a[],int n) //双向起泡排序
{
int low,high,flag,i,m;
m=0;//记录次数
low=0;  //low为从左向右的起点,也是从右向左的终点
high=n-1;//high为从左向右的终点,从右向左的起点
while(low<high)
{
m++;
flag=0;  //每一次排序都将flag设为0
for(i=low;i<high;i++)   //从左向右进行冒泡
{
if(a[i]>a[i+1])
{
swap(a[i],a[i+1]);
flag=1;
}
}

if(!flag)break;//如果没有交换,说明当前已经是正序了,直接退出

high--;

for(i=high;i>low;i--) //从右向左冒泡
{
if(a[i]<a[i-1])swap(a[i],a[i-1]);
}
low++;
cout<<"第"<<m<<"次排序";
print(a,n);//显示每次排序后的结果
}
}

int main()
{
int b[]={61,19,18,42,105,45,26,81,16,25};
cout<<"原始数据";
print(b,10);
sbubsort(b,10);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: