赞
踩
一、实验目的
1.熟悉排序的基本概念,包括排序的稳定性、内排序和外排序之间的差异;
2.掌握插入排序算法,包括直接插入排序、折半插入排序和希尔排序的过程和算法实现;
3.掌握交换排序算法,包括冒泡排序和快速排序的过程和算法实现。
二、实验环境
1.Windows操作系统的计算机
2.Python3.7环境平台和PyCharm编辑器
三、实验说明
1.实现插入排序算法和交换排序算法程序设计方法。
2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。
3.自主编写程序,必要时参考相关资料。
4.实验学时:2学时
四、实验内容和步骤
1.实验内容
(1) 编写一个实验程序,采用直接插入排序完成一个整数序列的递增排序,并用相关数据进行测试。
参考思路:
- 方法一:
-
- def InsertSort(R): #对R[0..n-1]按递增有序进行直接插入排序
-
- ……
-
-
-
- 方法二:
-
- def cmp(x,y):
-
- ……
-
-
-
- def InsertSort(R): #对R[0..n-1]按递增有序进行直接插入排序
-
- ……
-
-
-
-
-
- #主程序
-
- if __name__ == '__main__':
-
- R=[__________ _]
-
- print("初始序列",end=' ')
-
- print(R)
-
- print("排序")
-
- InsertSort(R)
-
- print("排序序列",end=' ')
-
- print(R)
-
-
-
(2)编写一个实验程序,采用希尔排序完成一个整数序列的递增排序,并用相关数据进行测试。
参考思路:
- def ShellSort(R): #对R[0..n-1]按递增有序进行希尔排序
-
- ……
-
-
-
-
-
- #主程序
-
- if __name__ == '__main__':
-
- R=[__________ _]
-
- print("初始序列",end=' ')
-
- print(R)
-
- print("排序")
-
- ShellSort(R)
-
- print("排序序列",end=' ')
-
- print(R)
(3)编写一个实验程序,采用冒泡排序完成一个整数序列的递增排序,并用相关数据进行测试。
参考思路:
- def BubbleSort(R): #对R[0..n-1]按递增有序进行冒泡排序
-
- ……
-
-
-
-
-
- #主程序
-
- if __name__ == '__main__':
-
- R=[__________ _]
-
- print("初始序列",end=' ')
-
- print(R)
-
- print("排序")
-
- BubbleSort(R)
-
- print("排序序列",end=' ')
-
- print(R)
-
-
-
2.实验步骤
(1)分析实验内容,写出程序大致框架或完整的程序代码。
(2)进入Python集成环境。
(3)编辑程序并进行保存。
(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。
(5)检查程序输出结果。
五、实验代码与结果(程序运行代码及其结果)
1. (1)给出算法的基本设计思想。
(2)根据设计思想,采用Python语言描述算法,关键之处给出注释。
- def InsertSort(R): #对R[0..n-1]按递增有序进行直接插入排序
-
- for i in range(1,len(R)): #从元素R[1]开始
-
- if R[i]<R[i-1]: #反序时
-
- tmp=R[i] #取出无序区的第一个元素
-
- j=i-1 #有序区R[0..i-1]中向前找R[i]的插入位置
-
- while True:
-
- R[j+1]=R[j] #将大于tmp的元素后移
-
- j-=1 #继续向前比较
-
- if j<0 or R[j]<=tmp:
-
- break #若j<0或者R[j]<=tmp,退出循环
-
- R[j+1]=tmp #在j+1处插入R[i]
-
-
-
- #方法二:
-
- def cmp(x,y): #实现递增排序的自定义比较函数
-
- if x<y: return True
-
- else: return False
-
-
-
- def InsertSort(R): #对R[0..n-1]按递增有序进行直接插入排序
-
- for i in range(1,len(R)): #从R[1]元素开始
-
- if cmp(R[i],R[i-1]): #反序时
-
- tmp=R[i] #取出无序区的第一个元素
-
- j=i-1; #在有序区R[0..i-1]中从右向左找R[i]的插入位置
-
- while True:
-
- R[j+1]=R[j] #将大于tmp的元素后移
-
- j-=1 #继续向前比较
-
- if j<0 or not cmp(tmp,R[j]):
-
- break #若j<0或者R[j]<=tmp,退出循环
-
- R[j+1]=tmp #在j+1处插入R[i]
-
-
-
-
-
- #主程序
-
- if __name__ == '__main__':
-
- R=[9,8,7,6,5,4,3,2,1,0]
-
- print("初始序列",end=' ')
-
- print(R)
-
- print("排序")
-
- InsertSort(R)
-
- print("排序序列",end=' ')
-
- print(R)
2. (1)给出算法的基本设计思想。
(2)根据设计思想,采用Python语言描述算法,关键之处给出注释。
- def ShellSort(R): #对R[0..n-1]按递增有序进行希尔排序
-
- d=len(R)//2 #增量置初值
-
- while d>0:
-
- for i in range(d,len(R)): #对所有相隔d位置的元素组采用直接插入排序
-
- if R[i]<R[i-d]: #反序时
-
- tmp=R[i]
-
- j=i-d
-
- while True:
-
- R[j+d]=R[j] #将大于tmp的元素后移
-
- j=j-d #继续向前找
-
- if j<0 or R[j]<=tmp:
-
- break #若j<0或者R[j]<=tmp,退出循环
-
- R[j+d]=tmp #在j+d处插入tmp
-
- d=d//2 #递减增量
-
-
-
- #主程序
-
- if __name__ == '__main__':
-
- R=[9,8,7,6,5,4,3,2,1,0]
-
- print("初始序列",end=' ')
-
- print(R)
-
- print("希尔排序")
-
- ShellSort(R)
-
- print("希尔排序序列",end=' ')
-
- print(R)
3. (1)给出算法的基本设计思想。
(2)根据设计思想,采用Python语言描述算法,关键之处给出注释。
- def BubbleSort(R): #对R[0..n-1]按递增有序进行冒泡排序
-
- for i in range(len(R)-1):
-
- exchange=False #本趟前将exchange置为False
-
- for j in range(len(R)-1,i,-1): #一趟中找出最小关键字的元素
-
- if R[j]<R[j-1]: #反序时交换
-
- R[j],R[j-1]=R[j-1],R[j] #R[j]和R[j-1]交换,将最小元素前移
-
- exchange=True #本趟发生交换置exchange为True
-
- if exchange==False: return #本趟没有发生交换,中途结束算法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。