欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1、圖示

2、項(xiàng)目資產(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模式實(shí)現(xiàn)堆排序的文章就介紹到這了,更多相關(guān)Java 堆排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)簡單汽車租賃系統(tǒng)

    Java實(shí)現(xiàn)簡單汽車租賃系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單汽車租賃系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解JAVA使用Comparator接口實(shí)現(xiàn)自定義排序

    詳解JAVA使用Comparator接口實(shí)現(xiàn)自定義排序

    這篇文章主要介紹了JAVA使用Comparator接口實(shí)現(xiàn)自定義排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Spring中的自動裝配機(jī)制詳解

    Spring中的自動裝配機(jī)制詳解

    這篇文章主要介紹了Spring中的自動裝配機(jī)制詳解,自動裝配就是會通過Spring的上下文為你找出相應(yīng)依賴項(xiàng)的類,通俗的說就是Spring會在上下文中自動查找,并自動給Bean裝配與其相關(guān)的屬性,需要的朋友可以參考下
    2023-08-08
  • springboot3解決跨域的幾種方式小結(jié)

    springboot3解決跨域的幾種方式小結(jié)

    這篇文章主要介紹了springboot3解決跨域的幾種方式,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的解決跨域有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • Java調(diào)取創(chuàng)藍(lán)253短信驗(yàn)證碼的實(shí)現(xiàn)代碼

    Java調(diào)取創(chuàng)藍(lán)253短信驗(yàn)證碼的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java調(diào)取創(chuàng)藍(lán)253短信驗(yàn)證碼的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2018-04-04
  • JAVA實(shí)現(xiàn)網(wǎng)絡(luò)/本地圖片轉(zhuǎn)BASE64存儲代碼示例

    JAVA實(shí)現(xiàn)網(wǎng)絡(luò)/本地圖片轉(zhuǎn)BASE64存儲代碼示例

    這篇文章主要給大家介紹了關(guān)于JAVA實(shí)現(xiàn)網(wǎng)絡(luò)/本地圖片轉(zhuǎn)BASE64存儲的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下
    2023-07-07
  • java虛擬機(jī)學(xué)習(xí)筆記進(jìn)階篇

    java虛擬機(jī)學(xué)習(xí)筆記進(jìn)階篇

    在本篇內(nèi)容里小編給大家分享了關(guān)于java虛擬機(jī)學(xué)習(xí)筆記的進(jìn)階內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限項(xiàng)目實(shí)踐

    mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限項(xiàng)目實(shí)踐

    本文主要介紹了mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Python安裝Jupyter Notebook配置使用教程詳解

    Python安裝Jupyter Notebook配置使用教程詳解

    這篇文章主要介紹了Python安裝Jupyter Notebook配置使用教程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java 8如何自定義收集器(collector)詳解

    java 8如何自定義收集器(collector)詳解

    這篇文章主要給大家介紹了關(guān)于java 8如何自定義收集器(collector)的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06

最新評論