devbox
小丑西瓜9
这个屌丝很懒,什么也没留下!
当前位置:   article > 正文

Python数据结构实验 排序实验(一)_数据排序实验程序

数据排序实验程序

一、实验目的

1.熟悉排序的基本概念,包括排序的稳定性、内排序和外排序之间的差异;

2.掌握插入排序算法,包括直接插入排序、折半插入排序和希尔排序的过程和算法实现;

3.掌握交换排序算法,包括冒泡排序和快速排序的过程和算法实现。

二、实验环境

1.Windows操作系统的计算机

2.Python3.7环境平台和PyCharm编辑器

三、实验说明 

1.实现插入排序算法和交换排序算法程序设计方法。  
2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。

3.自主编写程序,必要时参考相关资料。

4.实验学时:2学时

四、实验内容和步骤

1.实验内容

(1) 编写一个实验程序,采用直接插入排序完成一个整数序列的递增排序,并用相关数据进行测试。

参考思路:

  1. 方法一:
  2. def InsertSort(R):     #对R[0..n-1]按递增有序进行直接插入排序
  3.     ……
  4. 方法二:
  5. def cmp(x,y):
  6.     ……
  7.     
  8. def InsertSort(R):      #对R[0..n-1]按递增有序进行直接插入排序
  9.     ……
  10. #主程序
  11. if __name__ == '__main__':
  12.     R=[__________      _]
  13.     print("初始序列",end=' ')
  14.     print(R)
  15.     print("排序")
  16.     InsertSort(R)
  17.     print("排序序列",end=' ')
  18.     print(R)

(2)编写一个实验程序,采用希尔排序完成一个整数序列的递增排序,并用相关数据进行测试。

参考思路:

  1. def ShellSort(R):     #对R[0..n-1]按递增有序进行希尔排序
  2.     ……
  3. #主程序
  4. if __name__ == '__main__':
  5.     R=[__________      _]
  6.     print("初始序列",end=' ')
  7.     print(R)
  8.     print("排序")
  9.     ShellSort(R)
  10.     print("排序序列",end=' ')
  11.     print(R)

(3)编写一个实验程序,采用冒泡排序完成一个整数序列的递增排序,并用相关数据进行测试。

参考思路:

  1. def BubbleSort(R):       #对R[0..n-1]按递增有序进行冒泡排序
  2.     ……
  3. #主程序
  4. if __name__ == '__main__':
  5.     R=[__________      _]
  6.     print("初始序列",end=' ')
  7.     print(R)
  8.     print("排序")
  9.     BubbleSort(R)
  10.     print("排序序列",end=' ')
  11.     print(R)

2.实验步骤

(1)分析实验内容,写出程序大致框架或完整的程序代码。

(2)进入Python集成环境。

(3)编辑程序并进行保存。

(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。

(5)检查程序输出结果。

五、实验代码与结果(程序运行代码及其结果)

1. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

  1. def InsertSort(R): #对R[0..n-1]按递增有序进行直接插入排序
  2.   for i in range(1,len(R)): #从元素R[1]开始
  3.     if R[i]<R[i-1]:     #反序时
  4.            tmp=R[i] #取出无序区的第一个元素
  5.            j=i-1 #有序区R[0..i-1]中向前找R[i]的插入位置
  6.     while True:
  7.            R[j+1]=R[j] #将大于tmp的元素后移
  8.            j-=1 #继续向前比较
  9.            if j<0 or R[j]<=tmp:
  10.               break   #若j<0或者R[j]<=tmp,退出循环
  11.     R[j+1]=tmp #在j+1处插入R[i]
  12. #方法二:
  13. def cmp(x,y): #实现递增排序的自定义比较函数
  14.   if x<y: return True
  15.   else: return False
  16. def InsertSort(R): #对R[0..n-1]按递增有序进行直接插入排序
  17.   for i in range(1,len(R)): #从R[1]元素开始
  18.      if cmp(R[i],R[i-1]):      #反序时
  19.        tmp=R[i] #取出无序区的第一个元素
  20.        j=i-1; #在有序区R[0..i-1]中从右向左找R[i]的插入位置
  21.        while True:
  22.            R[j+1]=R[j] #将大于tmp的元素后移
  23.            j-=1 #继续向前比较
  24.            if j<0 or not cmp(tmp,R[j]):
  25.               break   #若j<0或者R[j]<=tmp,退出循环
  26.        R[j+1]=tmp #在j+1处插入R[i]
  27. #主程序
  28. if __name__ == '__main__':
  29.     R=[9,8,7,6,5,4,3,2,1,0]
  30.     print("初始序列",end=' ')
  31.     print(R)
  32.     print("排序")
  33.     InsertSort(R)
  34.     print("排序序列",end=' ')
  35. print(R)


2. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

  1. def ShellSort(R): #对R[0..n-1]按递增有序进行希尔排序
  2.   d=len(R)//2    #增量置初值
  3.   while d>0:
  4.     for i in range(d,len(R)):    #对所有相隔d位置的元素组采用直接插入排序
  5.        if R[i]<R[i-d]:      #反序时
  6.           tmp=R[i]
  7.           j=i-d
  8.           while True:
  9.              R[j+d]=R[j] #将大于tmp的元素后移
  10.              j=j-d              #继续向前找
  11.              if j<0 or R[j]<=tmp:
  12.                break   #若j<0或者R[j]<=tmp,退出循环
  13.           R[j+d]=tmp           #在j+d处插入tmp
  14.     d=d//2 #递减增量
  15. #主程序
  16. if __name__ == '__main__':
  17.     R=[9,8,7,6,5,4,3,2,1,0]
  18.     print("初始序列",end=' ')
  19.     print(R)
  20.     print("希尔排序")
  21.     ShellSort(R)
  22.     print("希尔排序序列",end=' ')
  23.     print(R)

3. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

  1. def BubbleSort(R):     #对R[0..n-1]按递增有序进行冒泡排序
  2.   for i in range(len(R)-1):
  3.     exchange=False #本趟前将exchange置为False
  4.     for j in range(len(R)-1,i,-1): #一趟中找出最小关键字的元素
  5.        if R[j]<R[j-1]:          #反序时交换
  6.           R[j],R[j-1]=R[j-1],R[j] #R[j]和R[j-1]交换,将最小元素前移
  7.           exchange=True #本趟发生交换置exchange为True
  8.     if exchange==False: return    #本趟没有发生交换,中途结束算法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/702566
推荐阅读
相关标签
  

闽ICP备14008679号