⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mergesortinganimationpainter.java

📁 用JAVA实现排序等简单算法的演示
💻 JAVA
字号:
package sortingAnimation;

import graphicAnimation.*;

import java.awt.*;
import javax.swing.*;

import animationController.AnimationController;

public class MergeSortingAnimationPainter extends SortingAnimationPainter {
	private MergeSortingAnimator mergeAnimator = null;				// 当选择合并排序时使用的演示器
	
	
	public MergeSortingAnimationPainter(JComponent parent, JComponent[] toBlock, AnimationController controller) {
		super(parent, toBlock, controller);
	}

	protected void createAnimator() {
		// 创建演示合并排序时所使用的演示器
		mergeAnimator = new MergeSortingAnimator(animationDriver);
		mergeAnimator.setStepDelay(localController.stepDelay);
		mergeAnimator.setUnitMoving(4*localController.unitMoving);
		mergeAnimator.setSortingColor(localController.dataColor, localController.compareColor, localController.swapColor, localController.selectColor);
		mainAreaAnimator = mergeAnimator;
		smallAreaAnimator = null;

		// 创建提示排序时间、比较次数、移动次数、交换次数、选择次数等信息的演示器
		infoAnimator = new SortingInfoAnimator();
		infoAnimator.setSortingColor(localController.dataColor, localController.compareColor, localController.swapColor, localController.selectColor);
		infoAnimator.setStartTime();
	}
	
	protected void connectAnimatorAndArea() {
		// 信息演示区域的演示器是infoAnimator,其他演示区域的演示器待定,因为当排序元素很多时不使用小区域的演
		// 示器,因此这里也暂时没有设置小区域的演示器为 boxAnimator
		infoArea.setAnimator(infoAnimator);

		// 设置各演示器所分别使用的演示区域,不过同一时刻某个演示区域只有一个演示器使用,在选定要演示的排序算
		// 法的同时,我们也会确定到底使用怎样的演示器
		infoAnimator.setAnimationArea(infoArea);
		mergeAnimator.setAnimationArea(mainArea);
	}
	
	/**
	 * 使用数组 data 创建演示用的最初的视图
	 */
	public void createAnimationView(int[] data) {
		// 这时总有 mainAreaAnimator == mergeAnimator
		mainArea.setAnimator(mergeAnimator);
		mergeAnimator.createRectAnimationScene(data, new Point(localController.startX, localController.mainStartY), localController.elementWidth-localController.spacingWidth, localController.spacingWidth, AnimationView.darkGreen, localController.unitHeight, localController.showValue);
		mergeAnimator.createMergeAnimatorScene(data, new Point(localController.startX, localController.mainMiddleY), localController.elementWidth, 0, Color.white);
		Animator.sleep(localController.stepDelay);
	}

	/**
	 * 使用动画展示合并排序时,将startIndex(包括) 到 endIndex(包括)处的元素从合并用的临时数组拷贝回待排序数组
	 */
	public void showCopyMergeDataScene(int startIndex, int endIndex) {
		infoAnimator.incMoveCounter(endIndex - startIndex + 1);
		mergeAnimator.showCopyMergeDataScene(startIndex, endIndex);
	}

	/**
	 * 使用动画展示合并排序时,将待排序数组中 dataIndex 处的元素拷贝到合并用的临时数组的 mergeIndex 处
	 */
	public void showCopyDataScene(int mergeIndex, int dataIndex) {
		infoAnimator.incMoveCounter();
		mergeAnimator.showCopyDataScene(mergeIndex, dataIndex);
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -