Java利用Strategy模式实现堆排序

 更新时间:2022年09月28日 11:21:01   作者:代码骑士  
策略设计模式(Strategy):可以整体的替换一个算法的实现部分,能够整体的替换算法,能让我们轻松地用不同方法解决同一个问题。本文将利用Strategy模式实现堆排序,感兴趣的可以学习一下

将通用算法放入具体类(HeapSorter),并将通用算法必须调用的方法定义在接口(HeapSorterHandle)中,从这个接口派生出DoubleHeapSorter并传给HeapSorter,之后就可以委托这个接口实现具体工作了。

1、图示

2、项目资产

3、源代码

接口类:HeapSortHandle

public interface HeapSorterHandle {
    public void swap(int index);
    public int length();
    public void setArray(Object array);
    public void adjustHeap(int i, int length);
}

接口派生类: DoubleHeapSorter 

public class DoubleHeapSorter implements HeapSorterHandle{
 
    private double[] array = null;
 
    public void swap(int index)
    {
      double temp = array[index];
      array[index] = array[0];
      array[0] = temp;
    }
 
    public int length()
    {
        return array.length;
    }
 
    public void setArray(Object array)
    {
        this.array = (double[])array;
    }
 
    public void adjustHeap(int i, int length) 
    {
        double temp = array[i];
        for(int k=i*2+1;k<length;k=k*2+1)
        {
            if(k+1<length && array[k]<array[k+1])
            {
                k++;
            }
            if(array[k] >temp)
            {
                array[i] = array[k];
                i = k;
            }
            else
            {
                break;
            }
        }
        array[i] = temp;
    }
    
}

具体算法类 HeapSorter :

public class HeapSorter {
    private int length = 0;
    private HeapSorterHandle itsSortHandle = null;
 
    public HeapSorter(HeapSorterHandle handle)
    {
        itsSortHandle = handle;
    }
 
    public void Sort(Object array)
    {
        itsSortHandle.setArray(array);
        length = itsSortHandle.length();
        if (length <= 1) return;
        for(int i=length/2-1;i>=0;i--)
        {
            itsSortHandle.adjustHeap(i,length);
        }
        for(int j=length-1;j>0;j--)
        {
            itsSortHandle.swap(j);
            itsSortHandle.adjustHeap(0,j);
        }
        return;
    }
}

主类Main:

import java.util.Arrays;
 
public class Main {
    public static void main(String[] args)
      {
          HeapSorter HS = new HeapSorter(new DoubleHeapSorter());
          double []array = {1,5,2,3,4,6,7};
          System.out.println("堆排序前:"+Arrays.toString(array));
          HS.Sort(array);
          System.out.println("堆排序后:"+Arrays.toString(array));
      }
}

输出:

注:javac -encoding UTF-8 Main.java(防止乱码) 

到此这篇关于Java利用Strategy模式实现堆排序的文章就介绍到这了,更多相关Java 堆排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java精确抽取网页发布时间

    Java精确抽取网页发布时间

    这篇文章主要为大家详细介绍了Java精确抽取网页发布时间的相关资料,尽量做到精确无误,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Java中Comparator升序降序的具体使用

    Java中Comparator升序降序的具体使用

    本文主要介绍了Java中Comparator升序降序的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 使用Java生成JWT(JSON Web Token)的方法示例

    使用Java生成JWT(JSON Web Token)的方法示例

    在现代应用程序中,身份验证和授权是至关重要的,JWT是一种简单而强大的身份验证和授权机制,可以在Web应用程序中安全地传输用户信息,本文主要介绍了使用Java生成JWT的方法示例,感兴趣的可以了解一下
    2024-03-03
  • Java 中 Form表单数据的两种提交方式

    Java 中 Form表单数据的两种提交方式

    本文给大家分享java中form表单数据的两种提交方式,分别是get从制定的服务器中获取数据,pos方式提交数据给指定的服务器处理,本文给大家介绍的非常详细,需要的朋友参考下吧
    2016-12-12
  • 详解Java中List接口底层实现原理

    详解Java中List接口底层实现原理

    Java是一种广泛应用的编程语言,被广泛应用于各种平台和应用领域,List接口是Java中最重要的数据结构之一,它为我们提供了一种灵活、高效、可扩展的数据结构,本篇文章将首先介绍Java中List接口的基本特性和使用方法,然后深入研究List接口的底层实现原理
    2023-11-11
  • Java递归和迭代区别详细介绍

    Java递归和迭代区别详细介绍

    这篇文章主要给大家介绍了关于Java中的迭代和递归有什么区别,文中介绍的非常详细,感兴趣的同学可以参考阅读
    2023-04-04
  • Mybatis拦截器打印sql问题

    Mybatis拦截器打印sql问题

    这篇文章主要介绍了Mybatis拦截器打印sql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • springboot中如何将logback切换为log4j2

    springboot中如何将logback切换为log4j2

    springboot默认使用logback作为日志记录框架,常见的日志记录框架有log4j、logback、log4j2,这篇文章我们来学习怎样将logbak替换为log4j2,需要的朋友可以参考下
    2023-06-06
  • 深入理解java中的null“类型”

    深入理解java中的null“类型”

    这篇文章主要介绍了深入理解java中的null“类型”,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Springboot集成定时器和多线程异步处理操作

    Springboot集成定时器和多线程异步处理操作

    这篇文章主要介绍了Springboot集成定时器和多线程异步处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论