Python动画可视化排序算法(冒泡-插入-选择-堆-shell-合并-快速)

136 篇文章 16 订阅

Python动画可视化排序算法:冒泡排序,插入排序,选择排序,堆排序,shell排序,合并排序,快速排序。

冒泡排序

冒泡排序是最直接的排序算法之一,它会多次遍历一个列表。

  • 从第一个元素开始,将当前元素与数组的下一个元素进行比较。
  • 如果当前元素大于数组的下一个元素,则交换它们。
  • 如果当前元素小于下一个元素,则移动到下一个元素。

从本质上讲,每个项目都会“冒泡”到它所属的位置。

import random
import math 
from array import *
from math import pi
import numpy as np

############################################################
# Bubble Sort Algorithm
############################################################
        
def bubble_sort(arr, count):
    for i in range(count):    
        
        #insert keyframe for every cube on every frame
        for cube in arr:
            cube.keyframe_insert(data_path="location", frame=i) 

        already_sorted = True
        for j in range(count - i -1):
            
            #get materials
            mat1 = arr[j].active_material.diffuse_color
            mat2 = arr[j + 1].active_material.diffuse_color
            
            rg1, rg2 = get_rg(mat1, mat2)
            
            #compare first colorarray values
            if rg1 > rg2: 
            
                #change location & insert keyframes based on bubble sort
                arr[j].location.x = (j+1)*2
                arr[j].keyframe_insert(data_path="location", frame=i+1)

                arr[j+1].location.x = j*2
                arr[j+1].keyframe_insert(data_path="location", frame=i+1)       
                
                #rearrange arrays
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                already_sorted = False
                
        if already_sorted:
            break
        
############################################################
# Setup Random Colors + Array to be sorted
############################################################

############################################################
# Get R and G Values from Material
############################################################

def get_rg(mat1, mat2):
    
    #get R value of both materials
    r1 = mat1[0]
    r2 = mat2[0]
    
    #get G value of both materials
    g1 = mat1[1]
    g2 = mat2[1]
    
    # R + G = value for comparison
    rg1 = r1 + g1
    rg2 = r2 + g2

    return rg1, rg2

############################################################
# Call Functions
############################################################

#setup_array(number of planes)
Matrix, count = setup_array(24)#only even numbers are valid

#bubble_sort + visualisation
for i in range(count):
    bubble_sort(Matrix[i], count)

插入排序

与冒泡排序一样,插入排序算法易于实现和理解。

  • 在数组上从 arr[1] 迭代到 arr[n]。
  • 将当前元素(键)与其前身进行比较。
  • 如果关键元素小于其前任元素,则比较之前的元素。
  • 将较大的元素向上移动一位,为交换的元素腾出空间。

它将给定的数组拆分为已排序和未排序的部分,然后将未排序部分的值拾取并放置在已排序部分的正确位置。

选择排序 | 堆排序 | Shell排序 | 合并排序 | 快速排序

参阅 -亚图跨际
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值