import matplotlib. pyplot as plt
import numpy as np
from IPython. display import display, clear_output
from palettable. colorbrewer. qualitative import *
冒泡排序
def bubble_sort ( arr) :
list_len = len ( arr)
try :
arr = arr. tolist( )
except :
pass
x_ticks = list ( range ( list_len) )
'''图'''
fig, ax = plt. subplots( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
plt. pause( 0.5 )
for i in range ( list_len- 1 ) :
flag = False
for j in range ( list_len - i - 1 ) :
if arr[ j] > arr[ j+ 1 ] :
arr[ j] , arr[ j+ 1 ] = arr[ j+ 1 ] , arr[ j]
flag = True
"""图"""
ax. cla( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
clear_output( wait = True )
display( fig)
clear_output( wait = True )
plt. pause( 0.01 )
if flag == False :
break
display( fig)
return arr
选择排序
def select_sort ( arr) :
list_len = len ( arr)
try :
arr = arr. tolist( )
except :
pass
x_ticks = list ( range ( list_len) )
'''图'''
fig, ax = plt. subplots( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
plt. pause( 0.5 )
for i in range ( list_len) :
min_index = i
for j in range ( i+ 1 , list_len) :
if arr[ j] < arr[ min_index] :
min_index = j
if min_index != i:
arr[ i] , arr[ min_index] = arr[ min_index] , arr[ i]
"""图"""
ax. cla( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
clear_output( wait = True )
display( fig)
clear_output( wait = True )
plt. pause( 0.01 )
display( fig)
return arr
插入排序
def insert_sort ( arr) :
list_len = len ( arr)
try :
arr = arr. tolist( )
except :
pass
x_ticks = list ( range ( list_len) )
'''图'''
fig, ax = plt. subplots( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
plt. pause( 0.5 )
for i in range ( list_len- 1 ) :
for j in range ( i+ 1 , 0 , - 1 ) :
if arr[ j] < arr[ j- 1 ] :
arr[ j] , arr[ j- 1 ] = arr[ j- 1 ] , arr[ j]
"""图"""
ax. cla( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
clear_output( wait = True )
display( fig)
clear_output( wait = True )
plt. pause( 0.01 )
else :
break
return arr
希尔排序
def shell_sort ( arr) :
list_len = len ( arr)
try :
arr = arr. tolist( )
except :
pass
x_ticks = list ( range ( list_len) )
'''图'''
fig, ax = plt. subplots( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
plt. pause( 0.5 )
temp = list_len // 2
while temp > 0 :
for k in range ( temp) :
for i in range ( k+ temp, list_len, temp) :
for j in range ( i, k, - temp) :
if arr[ j] < arr[ j- temp] :
arr[ j] , arr[ j- temp] = arr[ j- temp] , arr[ j]
"""图"""
ax. cla( )
ax. bar( x_ticks, height= arr, color= Set2_8. hex_colors)
clear_output( wait = True )
display( fig)
clear_output( wait = True )
plt. pause( 0.01 )
else :
break
temp //= 2
快速排序
def swap ( lst, i, j) :
lst[ i] , lst[ j] = lst[ j] , lst[ i]
def median3 ( lst, left, right) :
mid = ( left + right) // 2
if lst[ left] > lst[ mid] :
swap( lst, left, mid)
if lst[ left] > lst[ right] :
swap( lst, left, right)
if lst[ mid] > lst[ right] :
swap( lst, mid, right)
swap( lst, mid, right- 1 )
return lst[ right- 1 ]
def quicksort ( arr, left, right) :
list_len = right - left + 1
if list_len < 2 :
return
pivot = median3( arr, left, right)
i = left
j = right - 2
while True :
while arr[ i] < pivot:
i+= 1
while arr[ j] > pivot:
j-= 1
if i < j:
swap( arr, i, j)
else :
swap( arr, i, right- 1 )
break
quicksort( arr, left, i- 1 )
quicksort( arr, i+ 1 , right)
return arr
def quick_sort ( arr) :
try :
arr = arr. tolist( )
except :
pass
left = 0
right = len ( arr) - 1
quicksort( arr, left, right)
return arr
归并排序
def merge ( l_lst, r_lst) :
temp = [ ]
while l_lst and r_lst:
if l_lst[ 0 ] <= r_lst[ 0 ] :
temp. append( l_lst. pop( 0 ) )
else :
temp. append( r_lst. pop( 0 ) )
while l_lst:
temp. append( l_lst. pop( 0 ) )
while r_lst:
temp. append( r_lst. pop( 0 ) )
return temp
def merge_sort ( arr) :
try :
arr = arr. tolist( )
except :
pass
list_len = len ( arr)
if list_len < 2 :
return arr
mid = list_len // 2
left = merge_sort( arr[ 0 : mid] )
right = merge_sort( arr[ mid: ] )
return merge( left, right)