数据结构实验八 排序(希尔排序,双向起泡排序)
2018-02-06 22:21
381 查看
一、 实验目的
1. 熟悉各种内部排序算法
2. 能够编写程序显示排序过程中各趟排序的结果
3. 能够编写一些排序的算法
二、 实验内容
1. 采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果。
2. 编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果。
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; }
相关文章推荐
- Data binding 入坑笔记二进阶篇之双向绑定
- 第二章(契约 双向操作)
- java数据结构和算法------希尔排序
- 希尔排序
- 用双向循环链表解决数据结构中的选美比赛问题。
- mysql数据双向同步实现
- Python实现希尔排序
- C语言实现双向链表之ADT定义
- 【多线程学习第一弹】支持value重复的双向Map
- 浅谈vue,angular,react数据双向绑定原理分析
- tomcat6配置https (双向认证/单向认证)
- 希尔排序(shellsort)
- Android使用DrawerLayout实现双向侧滑菜单
- 程序员成长之双向循环链表
- Java数据结构-线性表之双向链表
- 双向链表下的简单迭代器实现
- gsoap 通过SSL双向认证调用service
- ssl双向认证和单向认证原理
- Hibernate的学习之路二十(一对多的双向关联保存数据)
- 双向循环链表在 LINUX kernel 中的实现