def selection_sort(arr):
for i in range(0,len(arr)-1):
index=i
for j in range(i+1,len(arr)):
if arr[index]>arr[j]:
index = j
arr[i], arr[index] = arr[index], arr[i]
print(arr)
arr=[9,1,3,2,4,6,5,8,7,0]
selection_sort(arr)
def inert_sort(arr):
N=len(arr)
for x in range(1,N):
a,b=x,x
n=arr[x]
while n<arr[a-1] and a-1>=0:
a=a-1
if a-1<0:
a=0
while b>a:
arr[b]=arr[b-1]
b=b-1
arr[a]=n
return arr
arr=[9,1,3,2,4,6,5,8,7,0]
inert_sort(arr)
print(arr)
def insertsort(arr):
N=len(arr)
for x in range(1,N):
key=arr[x]
a=x
while key<arr[a-1]:
arr[a]=arr[a-1]
a=a-1
if a-1<0:
break
arr[a]=key
arr=[9,1,3,2,4,6,5,8,7,0]
insertsort(arr)
print(arr)
def mergeSort(arr):
import math
if(len(arr)<2):
return arr
middle = math.floor(len(arr)/2)
left, right = arr[0:middle], arr[middle:]
return merge(mergeSort(left), mergeSort(right))
def merge(left,right):
result = []
while left and right:
if left[0] <= right[0]:
result.append(left.pop(0));
else:
result.append(right.pop(0));
while left:
result.append(left.pop(0));
while right:
result.append(right.pop(0));
return result
arr=[9,1,3,2,4,6,5,8,7,]
print(mergeSort(arr))
(2)
def merge(a, b):
c = []
h = j = 0
while j < len(a) and h < len(b):
if a[j] < b[h]:
c.append(a[j])
j += 1
else:
c.append(b[h])
h += 1
if j == len(a):
for i in b[h:]:
c.append(i)
else:
for i in a[j:]:
c.append(i)
return c
def merge_sort(lists):
if len(lists) <= 1:
return lists
middle = len(lists)//2
left = merge_sort(lists[:middle])
right = merge_sort(lists[middle:])
return merge(left, right)
arr=[9,1,3,2,4,6,5,8,7,]
arrs=merge_sort(arr)
print(arrs)
import random
def MAX_Heapify(heap,HeapSize,root):#在堆中做结构调整使得父节点的值大于子节点
left = 2*root + 1
right = left + 1
larger = root
if left < HeapSize and heap[larger] < heap[left]:
larger = left
if right < HeapSize and heap[larger] < heap[right]:
larger = right
if larger != root:#如果做了堆调整则larger的值等于左节点或者右节点的,这个时候做对调值操作
heap[larger],heap[root] = heap[root],heap[larger]
MAX_Heapify(heap, HeapSize, larger)
def Build_MAX_Heap(heap):#构造一个堆,将堆中所有数据重新排序
HeapSize = len(heap)#将堆的长度当独拿出来方便
for i in range((HeapSize -2)//2,-1,-1):#从后往前出数
MAX_Heapify(heap,HeapSize,i)
def HeapSort(heap):#将根节点取出与最后一位做对调,对前面len-1个节点继续进行对调整过程。
Build_MAX_Heap(heap)
for i in range(len(heap)-1,-1,-1):
heap[0],heap[i] = heap[i],heap[0]
MAX_Heapify(heap, i, 0)
return heap
if __name__ == '__main__':
arr = [9, 1, 3, 2, 4, 6, 5, 8, 7, 0]
print(arr)
HeapSort(arr)
print(arr)
def bucket_sort(lst):
buckets = [0] * ((max(lst) - min(lst))+1)
for i in range(len(lst)):
buckets[lst[i]-min(lst)] += 1
res=[]
for i in range(len(buckets)):
if buckets[i] != 0:
res += [i+min(lst)]*buckets[i]
return res
arrs=[9,1,3,2,4,6,5,8,7,0]
print(bucket_sort(arrs))
(2):通常桶排序
arr = [3, 5, 6, 1, 2, 10]
def bucketSort(arr):
max_num = max(arr)
bucket = [0] * (max_num + 1)
for i in arr:
bucket[i] = 1
sorted_num = []
for j in range(len(bucket)):
if bucket[j] != 0:
sorted_num.append(j)
return sorted_num
print(bucketSort(arr))
(3):解决重复元素
arr = [3, 5, 3, 5, 1, 10, 6, 1, 2, 10]
def bucketSort2(arr):
max_num = max(arr)
bucket = [0] * (max_num + 1)
for i in arr:
bucket[i] += 1
sorted_num = []
for j in range(len(bucket)):
if bucket[j] != 0:
for y in range(bucket[j]):
sorted_num.append(j)
return sorted_num
print(bucketSort2(arr))
(4):解决数据稀疏问题
arr = [30, 40, 50, 80, 40, 60, 10, 100]
def bucketSort3(arr):
max_num = max(arr)
min_num = min(arr)
diff = max_num - min_num
bucket = [0] * (diff + 1)
for i in arr:
bucket[i - min_num] += 1
sorted_num = []
for j in range(len(bucket)):
if bucket[j] != 0:
for y in range(bucket[j]):
sorted_num.append(j + min_num)
return sorted_num
print(bucketSort3(arr))
from random import randint
def radix_sort(arr,d):
for k in range(d) : #0,1,2
s=[[] for i in range(10)]
for i in arr:
#/取值的结果为float类型,//的结果为int类型
s[i//(10**k)%10].append(i)
arr=[j for i in s for j in i]
return arr
a=[randint(1,999) for i in range(10)]
print(a)
num=len(str(max(a)))
a=radix_sort(a,num)
print(a)