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如何拷贝复制对象和集合问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 关于spring data jpa 模糊查询like的坑点

    关于spring data jpa 模糊查询like的坑点

    这篇文章主要介绍了关于spring data jpa 模糊查询like的坑点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java面试题冲刺第二十天--算法(1)

    Java面试题冲刺第二十天--算法(1)

    这篇文章主要为大家分享了最有价值的三道关于算法的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot+Mybatis分页插件PageHelper实现分页效果

    SpringBoot+Mybatis分页插件PageHelper实现分页效果

    这篇文章主要介绍了SpringBoot+Mybatis实现分页效果,本案例是采用Mybatis分页插件PageHelper实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • java对象持久化保存的方法详解

    java对象持久化保存的方法详解

    这篇文章主要介绍了java对象持久化保存的方法详解,在java应用开发的过程中,经常遇到需要持久保存java对象的情况,比如:用户信息、博客评论内容等等,本文针对java对象的持久化保存方法进行讨论,简述各个方法的优劣,需要的朋友可以参考下
    2023-07-07
  • Nacos通过RefreshScope实现配置自动更新的方式分享

    Nacos通过RefreshScope实现配置自动更新的方式分享

    这篇文章主要给大家介绍了Nacos如何通过RefreshScope实现配置自动更新,文中给了两种实现方式供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-09-09
  • IDEA导入JDBC驱动的jar包步骤详解

    IDEA导入JDBC驱动的jar包步骤详解

    JDBC是一种底层的API,是连接数据库和Java应用程序的纽带,因此我们在访问数据库时需要在业务逻辑层中嵌入SQL语句,这篇文章主要介绍了IDEA导入JDBC驱动的jar包,需要的朋友可以参考下
    2023-07-07
  • Java开发学习 Java数组操作工具

    Java开发学习 Java数组操作工具

    这篇文章主要为大家详细介绍了自己编写的Java数组操作工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 在Map中实现key唯一不重复操作

    在Map中实现key唯一不重复操作

    这篇文章主要介绍了在Map中实现key唯一不重复操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • IDEA之项目run按钮为灰色,无法运行问题

    IDEA之项目run按钮为灰色,无法运行问题

    这篇文章主要介绍了IDEA之项目run按钮为灰色,无法运行问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论