一、冒泡排序
import os
import sys
# 请在此输入您的代码
n=int(input())
m=list(map(int,input().split()))
n=len(m)
#循环n-1次,每次获得i大
for i in range(1,n):
#每次比较a[j]和a[j+1],从0开始!
for j in range(0,n-i):
if m[j]>m[j+1]:
m[j+1],m[j]=m[j],m[j+1]
print(' '.join(map(str,m)))
二、选择排序
n=int(input())
m=list(map(int,input().split()))
#循环n-1次
for i in range(n-1):
#第i次从[i,n-1]找最小值
min_value=m[i]
min_index=i
for j in range(i,n):
#每个元素都和最小值比较
if m[j]<min_value:
min_value=m[j]
min_index=j
#将最小值和最前面元素交换
m[min_index],m[i]=m[i],m[min_index]
print(" ".join(map(str,m)))
三、插入排序
n=int(input())
m=list(map(int,input().split()))
#对于第i个数字,在区间[0,i-1]中从后往前查找对应插入的位置
for i in range(1,n):
value=m[i]
#插入元素下标,当所有元素都大,即最小值插入第一个位置
insert_idx=0
for j in range(i-1,-1,-1):
if m[j]>value:
#往后挪
m[j+1]=m[j]
else:
insert_idx=j+1
break;
m[insert_idx]=value
print(" ".join(map(str,m)))
四、快速排序
def partition(a,left,right):
"""找一个基准值x,然后把数组分成三部分"""
#基准为a[left]
idx=left+1
for i in range(left+1,right+1):
#如果元素小于基准值,放到前面去
if a[i]<=a[left]:
a[i],a[idx]=a[idx],a[i]
idx+=1
#把前半部分的最后一个和基准值交换
a[idx-1],a[left]=a[left],a[idx-1]
return idx-1
#对a[left,right]进行排序
def quicksort(a,left,right):
if left<right:
mid=partition(a,left,right)
#此时a分成三部分,[left,mid-1],[mid],[mid+1,left]
quicksort(a,left,mid-1)
quicksort(a,mid+1,right)
a=[5,3,8,1,2,9,4,7,6]
left=0
right=8
quicksort(a,left,right)
print(a)
五、归并排序
def Merge(A,B):
"""
合并两个有序列表
:param A:
:param B:
:return:返回合并结果
"""
result=[]
while len(A)!=0 and len(B)!=0:
if A[0]<=B[0]:
result.append(A.pop(0))#弹出A[0]并且添加到结果集
else:
result.append(B.pop(0))
result.extend(A)
result.extend(B)
return result
A=[1,3,5,6,7]
B=[2,3,4,9]
print(Merge(A,B))
def Merge(A,B):
"""
合并两个有序列表
:param A:
:param B:
:return:返回合并结果
"""
result=[]
while len(A)!=0 and len(B)!=0:
if A[0]<=B[0]:
result.append(A.pop(0))#弹出A[0]并且添加到结果集
else:
result.append(B.pop(0))
result.extend(A)
result.extend(B)
return result
def MergeSort(A):
if len(A)<2:
return A
mid=len(A)//2
left=MergeSort(A[:mid])
right=MergeSort(A[mid:])
return Merge(left,right)
n=int(input())
a=list(map(int,input().split()))
print(" ".join(map(str,MergeSort(a))))
六、桶排序
def Bucket_Sort(a,bucketcount):
"""
:param a: 排序列表
:param bucketcount: 桶的数量
:return:
"""
minvalue,maxvalue=min(a),max(a)
#桶大小:每个桶的元素范围
bucketsize=(maxvalue-minvalue+1)//bucketcount
res=[[] for i in range(bucketcount+1)]
#把所有元素放到对应桶中
for x in a:
#元素放在第几个桶
idx=(x-minvalue)//bucketsize
res[idx].append(x)
print(res)
#每个桶单独排序
ans=[]
for res_x in res:
res_x.sort()
ans+=res_x
return ans
n=int(input())
a=list(map(int,input().split()))
a=Bucket_Sort(a,min(n,1000))
print(" ".join(map(str,a)))