最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java利用Strategy模式實現(xiàn)堆排序

 更新時間:2022年09月28日 11:21:01   作者:代碼騎士  
策略設(shè)計模式(Strategy):可以整體的替換一個算法的實現(xiàn)部分,能夠整體的替換算法,能讓我們輕松地用不同方法解決同一個問題。本文將利用Strategy模式實現(xiàn)堆排序,感興趣的可以學(xué)習(xí)一下

將通用算法放入具體類(HeapSorter),并將通用算法必須調(diào)用的方法定義在接口(HeapSorterHandle)中,從這個接口派生出DoubleHeapSorter并傳給HeapSorter,之后就可以委托這個接口實現(xiàn)具體工作了。

1、圖示

2、項目資產(chǎn)

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(防止亂碼) 

到此這篇關(guān)于Java利用Strategy模式實現(xiàn)堆排序的文章就介紹到這了,更多相關(guān)Java 堆排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于@SpringBootApplication詳解

    關(guān)于@SpringBootApplication詳解

    這篇文章主要介紹了關(guān)于@SpringBootApplication的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Exception in thread main java.lang.NoClassDefFoundError錯誤解決方法

    Exception in thread main java.lang.NoClassDefFoundError錯誤解決方

    這篇文章主要介紹了Exception in thread main java.lang.NoClassDefFoundError錯誤解決方法,需要的朋友可以參考下
    2016-08-08
  • Spring?Boot提高開發(fā)效率必備工具lombok使用

    Spring?Boot提高開發(fā)效率必備工具lombok使用

    這篇文章主要為大家介紹了Spring?Boot提高開發(fā)效率的必備工具lombok使用方法示例及步驟說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • sql查詢返回值使用map封裝多個key和value實例

    sql查詢返回值使用map封裝多個key和value實例

    這篇文章主要介紹了sql查詢返回值使用map封裝多個key和value實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Boot中防止遞歸查詢的兩種方式

    Spring Boot中防止遞歸查詢的兩種方式

    這篇文章主要給大家介紹了關(guān)于Spring Boot中防止遞歸查詢的兩種方式,兩種方式分別是在application.properties中配置和在entity中添加注解,都給出了詳細(xì)的示例代碼,需要的朋友們下面來一起看看吧。
    2017-06-06
  • JAVA工程中引用本地jar的3種常用簡單方式

    JAVA工程中引用本地jar的3種常用簡單方式

    Jar文件的全稱是Java Archive File即Java歸檔文件,主要是對class文件進行壓縮,是一種壓縮文件,和常見的zip壓縮文件兼容,下面這篇文章主要給大家介紹了關(guān)于JAVA工程中引用本地jar的3種常用簡單方式,需要的朋友可以參考下
    2024-03-03
  • JavaWeb文件上傳下載功能示例解析

    JavaWeb文件上傳下載功能示例解析

    這篇文章主要介紹了JavaWeb中的文件上傳和下載功能的實現(xiàn),文件上傳和下載功能是非常常用的功能,需要的朋友可以參考下
    2016-06-06
  • SpringBoot結(jié)合Vue實現(xiàn)投票系統(tǒng)過程詳解

    SpringBoot結(jié)合Vue實現(xiàn)投票系統(tǒng)過程詳解

    這篇文章主要介紹了SpringBoot+Vue框架實現(xiàn)投票功能的項目系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • IDEA如何添加配置文件到classpath中

    IDEA如何添加配置文件到classpath中

    這篇文章主要介紹了IDEA如何添加配置文件到classpath中,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Java使用PreparedStatement接口及ResultSet結(jié)果集的方法示例

    Java使用PreparedStatement接口及ResultSet結(jié)果集的方法示例

    這篇文章主要介紹了Java使用PreparedStatement接口及ResultSet結(jié)果集的方法,結(jié)合實例形式分析了PreparedStatement接口及ResultSet結(jié)果集的相關(guān)使用方法與操作注意事項,需要的朋友可以參考下
    2018-07-07

最新評論

肇东市| 玉林市| 陇西县| 偏关县| 新河县| 江源县| 盐津县| 东安县| 石棉县| 宜州市| 阿荣旗| 常宁市| 高淳县| 泰来县| 喜德县| 河南省| 托里县| 万荣县| 凤阳县| 宁津县| 岗巴县| 会同县| 南澳县| 遵化市| 从化市| 安化县| 曲阜市| 平阴县| 聊城市| 临朐县| 饶河县| 二连浩特市| 泾阳县| 衡东县| 古田县| 崇义县| 海林市| 长子县| 元氏县| 宜都市| 克拉玛依市|