A40758. 从键盘接收一组不重复整数,并将这组整数按从小到大的顺序排列。以下程序采取快速排序法对这组整数进行排序。快速排序法的原理是:(1)取这组数据中间那个数为锚定值 mid;(2)从这组数据开头往右找,遇到比 mid 大的数则停下, 位置记为 i;(3)从这组数据末尾往左找,遇到比 mid 小的数则停下, 位置记为 j;(4)如果此时 i 仍在 j 左边,即i<=j, 则交换这两个数;(5)重复(2) …
题目描述
从键盘接收一组不重复整数,并将这组整数按从小到大的顺序排列。
以下程序采取快速排序法对这组整数进行排序。
快速排序法的原理是:
(1)取这组数据中间那个数为锚定值 mid;
(2)从这组数据开头往右找,遇到比 mid 大的数则停下, 位置记为 i;
(3)从这组数据末尾往左找,遇到比 mid 小的数则停下, 位置记为 j;
(4)如果此时 i 仍在 j 左边,即i<=j, 则交换这两个数;
(5)重复(2) ~(4) 直到i、j重合;
(6)对i左边的数进行快速排序;
(7)对右边的数进行快速排序。
输入示例:
请输入需要排序的一组整数,数与数之间用空格隔开: 6 10 11 8 4 1 9 7
输出示例:
排序结果:1 4 6 7 8 9 10 11
程序模板:
def QuickSort(left,right):
if ________①____________:
return
mid=Numbers[left+(right-left)//2]
i=left
j=right
while i<j:
while Numbers[i]<mid:
i+=1
while Numbers[j]>mid:
j-=1
if i<=j:
________②____________
QuickSort(left,j-1)
QuickSort(i+1,right)
Numbers=list(map(int,input("请输入需要排序的一组整数,数与数之间用空格隔开: ") .________③____________) )
QuickSort(0, ________④____________)
print("排序结果: ", end="")
for i in Numbers:
print(i,end=" ")
参考答案
def QuickSort(left, right):
if left >= right:
return
mid = Numbers[left+(right-left) // 2]
i = left
j = right
while i < j:
while Numbers[i] < mid:
i += 1
while Numbers[j] > mid:
j -= 1
if i <= j:
Numbers[i], Numbers[j] = Numbers[j], Numbers[i]
QuickSort(left, j-1)
QuickSort(i+1, right)
Numbers = list(map(int, input("请输入需要排序的一组整数, 数与数之间用空格隔开: ") . split()))
QuickSort(0, len(Numbers) - 1)
print("排序结果: ", end="")
for i in Numbers:
print(i, end=" ")答案解析
评分标准:
(1)left>=right; (2 分)
(2)Numbers[i],Numbers[j]=Numbers[j],Numbers[i] ; (2 分)
(3)split() ; (2 分)
(4)len(Numbers) -1。 (2分)