问题描述
在一个神秘的岛屿上,有一支探险队发现了一批宝藏,这批宝藏是以整数数组的形式存在的。每个宝藏上都标有一个数字,代表了其珍贵程度。然而,由于某种神奇的力量这批宝藏的顺序被打乱了,探险队需要将宝藏按照珍贵程度进行排序,以便更好地研究和保护它们。作为探险队的一员,肖恩需要设计合适的排序算法来将宝藏按照珍贵程度进行从小到大排序。
输入描述
输入第一行包括一个数字n,表示宝藏总共有n个
输入的第二行包括n个数字,第个数字a[i]表示第i个宝藏的珍贵程度
数据保证1<=n<=10^3,1<=a[i] <=10^6(题目Ⅰ要求)
数据保证1<=n<=10^5,1<=a[i] <=10^9(题目Ⅱ要求)
输出描述
输出n个数字,为对宝藏按照珍贵程度从小到大排序后的数组
样例输入
5
1 5 9 3 7
样例输出
1 3 5 7 9
实验代码
def bubble_sort(a,n):
'''
冒泡排序,第一次循环排好最后一个位置,然后依次往前排列
'''
#外层循环次数
for i in range(1,n):
#ide = 0
#ide_value = a[ide]
for j in range(n-i):
if a[j] > a[j+1]:
a[j+1],a[j] = a[j],a[j+1]
def select_sort(a,n):
'''
选择排序,第一次循环排好第一个位置,然后依次往后排列
'''
for i in range(n-1):
ide = i
ide_value = a[ide]
for j in range(i+1,n):
if a[j] < a[ide]:
ide = j
if i != ide:
a[i],a[ide] = a[ide],a[i]
def insert_sort(a,n):
'''
插入排序,每次循环排列好前面的几个位置,类似与整理扑克牌的方法
'''
for i in range(1,n):
#记录插入点位置和值
ide = i
ide_value = a[ide]
for j in range(i-1,-1,-1):
#判断合适的插入点
if a[j] > ide_value:
a[j+1] = a[j]
ide -= 1
#将该值插入指定位置
a[ide] = ide_value
def quick_sort_part(a,left,right):
'''
快速排序组成部分,寻找一个数做参考轴,将值比轴小的放在左边,大的放右边
'''
#将比轴大的放在轴左侧
ide = left + 1
for i in range(ide,right+1):
if a[left] >= a[i]:
a[i],a[ide] = a[ide],a[i]
ide += 1
a[left],a[ide-1] = a[ide-1],a[left]
return ide -1
def quick_sort(a,left,right):
'''
快速排序,将问题分割,采用递归方式解决问题
'''
if left <= right:
mid=quick_sort_part(a,left,right)
quick_sort(a,left,mid-1)
quick_sort(a,mid+1,right)
def merge_sort_part(a,b):
'''
归并排序组成部分,将两个按照一定顺序排列的列表合并成一个新的按一定顺序排列的列表
'''
result = []
while len(a)>0 and len(b)>0:
if a[0] < b[0]:
result.append(a.pop(0))
else:
result.append(b.pop(0))
result.extend(a)
result.extend(b)
return result
def merge_sort(a):
'''
归并排序,将列表分成两个列表,递归上述过程,在将所分成的小列表合并成排好序的大列表
'''
mid = len(a) // 2
if len(a) < 2:
return a
a_lis = merge_sort(a[:mid])
b_lis = merge_sort(a[mid:])
return merge_sort_part(a_lis,b_lis)
n = int(input())
lis = list(map(int,input().split()))
#bubble_sort(lis,n)
#select_sort(lis,n)
#insert_sort(lis,n)
quick_sort(lis,0,len(lis)-1)
#lis_new = merge_sort(lis)
print(' '.join(map(str,lis)))
测试总结
冒泡排序、选择排序、插入排序时间复杂度是n^2,快速排序和归并排序时间复杂度nlogn