国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - java堆排序原理與實(shí)現(xiàn)方法分析

java堆排序原理與實(shí)現(xiàn)方法分析

2021-06-25 13:55_almost_ Java教程

這篇文章主要介紹了java堆排序原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了java堆排序的相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了java堆排序原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

堆是一個(gè)數(shù)組,被看成一個(gè)近似完全二叉樹。

舉例說(shuō)明:

java堆排序原理與實(shí)現(xiàn)方法分析java堆排序原理與實(shí)現(xiàn)方法分析

堆的性質(zhì):

1.已知元素在數(shù)組中的序號(hào)為i

其父節(jié)點(diǎn)的序號(hào)為 i/2的整數(shù)
其左孩子節(jié)點(diǎn)的序號(hào)為2*i
其右孩子節(jié)點(diǎn)的序號(hào)為2*i+1

2.堆分為最大堆和最小堆

在最大堆中,要保證父節(jié)點(diǎn)的值大于等于其孩子節(jié)點(diǎn)的值
在最小堆中,要保證父節(jié)點(diǎn)的值小于等于其孩子節(jié)點(diǎn)的值

java實(shí)現(xiàn)堆排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public class myheapsort {
  public void heap_sort(int[] a) {
    /**
     * 這個(gè)函數(shù)完成堆排序
     * 先構(gòu)建一個(gè)最大堆
     * 將數(shù)組中第一個(gè)元素和最后一個(gè)交換,
     * 堆的長(zhǎng)度減一
     * 在從第一個(gè)位置開始保證堆的性質(zhì)調(diào)用max_heapify()函數(shù)。
     * 這樣保證目前最大的元素在數(shù)組的最后位置。
     * 以此類推,直到最后一個(gè)元素。
     */
    build_max_heap(a);
    for (int i = a.length - 1; i >= 1; i--) {
      int temp = a[0];
      a[0] = a[i];
      a[i] = temp;
      max_heapify(a, 0, i);
    }
  }
  public void build_max_heap(int[] a) {
    /**
     * 這個(gè)函數(shù)用來(lái)構(gòu)建堆
     * a:待排序的數(shù)組
     * (for循環(huán)中i的值從數(shù)組長(zhǎng)度的一般開始取,是因?yàn)橥耆鏄涞男再|(zhì),
     * 一半的節(jié)點(diǎn)葉根節(jié)點(diǎn)所以從葉節(jié)點(diǎn)開始向上遍歷來(lái)保證堆的性質(zhì))
     */
    for (int i = a.length/2; i >= 0; i--) {
      max_heapify(a, i, a.length);
    }
  }
  public void max_heapify(int[] a, int i, int heap_size) {
    /**這個(gè)函數(shù)用來(lái)維護(hù)堆的性質(zhì),
     * 保證以序號(hào)為i的元素為根節(jié)點(diǎn)的子樹中,父節(jié)點(diǎn)的值大于其孩子節(jié)點(diǎn)的值。
     * a:待排序數(shù)組
     * i:在數(shù)組a中的序號(hào)
     * heap_size:堆的大小
     */
    int largest = i;
    int l = i * 2 + 1;
    int r = i * 2 + 2;
    if (l < heap_size && a[l] > a[i]) largest = l;
    if (r < heap_size && a[r] > a[largest]) largest = r;
    if (largest != i) {
      int temp = a[i];
      a[i] = a[largest];
      a[largest] = temp;
      max_heapify(a, largest, heap_size);
    }
  }
  public static void main(string[] args) throws exception {
    system.out.println("服務(wù)器之家測(cè)試結(jié)果:");
    int[] a = new int[]{1,3,2,5,34,23,44,15,67,45};
    new myheapsort().heap_sort(a);
    for (int x : a) system.out.println(x);
  }
}

代碼中例子的運(yùn)行結(jié)果:

java堆排序原理與實(shí)現(xiàn)方法分析

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

原文鏈接:https://blog.csdn.net/u014028027/article/details/78626416

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲免费视频在线 | 日韩三级网址 | 亚洲欧美在线一区 | 亚洲一区国产视频 | 久久久www成人免费无遮挡大片 | 国产精品一区二区三区免费 | 久久精品香蕉 | 日本在线一区二区三区 | 国产精品视频播放 | 中文字幕一级毛片 | 色版视频在线观看 | 日韩一区二区三区视频 | 国产精品色一区二区三区 | 韩日一区二区三区 | 国产美女自拍视频 | 日韩在线播放一区二区 | 亚洲精品久久久久久久久久久 | 国产精品久久久久久久久久免费看 | 成人免费av | 国产精品香蕉在线观看 | 三区影院| 久久久久久中文字幕 | 亚洲欧美一区二区三区不卡 | 中文字幕在线观看视频地址二 | 婷婷在线视频 | 龙珠z国语版291集全 | 可以免费看黄的网站 | 国产精品一卡二卡三卡 | 亚洲综合中文字幕在线观看 | 69久久久久久 | 玖玖精品视频 | 日韩不卡一区二区三区 | 污视频免费 | 久久99久久99精品免观看粉嫩 | 亚洲精品日本 | 久久精品国产99国产精品 | 在线成年人电影 | 精品第一区 | 亚洲视频 欧美视频 | 男女全黄一级一级高潮免费看 | 韩日精品一区 |