ホームページ  >  記事  >  Java  >  Javaのヒープソートとは何ですか?ヒープソートの概要

Javaのヒープソートとは何ですか?ヒープソートの概要

青灯夜游
青灯夜游転載
2018-10-22 17:59:563098ブラウズ

この記事では、Java におけるヒープ ソートとは何ですか?ヒープソートの紹介。困っている友人は参考にしていただければ幸いです。

  • ヒープ ソートの概要:
    ヒープ ソートは 2 つの段階に分けることができます。ヒープ構築フェーズでは、元の配列をヒープに再編成し、次にシンキング ソート フェーズでヒープからすべての要素を順番に削除し、ソート結果を取得します。
    1. ヒープの構築、効果的な方法は、sink() シンキング関数を右から左に使用してサブヒープを構築することです。配列の各位置にはサブヒープのルート ノードがあり、ノードの 2 つの子ノードがすでにヒープ内にある場合は、sink() メソッドを呼び出します。ノードはそれらを結合してヒープに保存できます。サイズ 1 のサブヒープは、sink()、つまりシンク操作を必要としないため、スキップできます。シンク操作とフローティング操作については、私が書いた優先キューの記事を参照してください。
    2. ヒープのソートでは、最初のステップでヒープを構築します。このヒープでは、ルート ノードが常に最大値を持つノードとなるため、ルート ノードの値を配列の最後の値と交換します。ヒープの構造を維持するには、sink() シンキングを使用するだけです。

  • 具体的なコード実装:

public class PQSort{
	public static void main(String[] args){
		int[] a = {9,1,7,5,3,9,12,56,21,45};
		sort(a);
		for(int i=0;i<a.length system.out.print public int for>=0;k--){
				sink(a,k,N);
			}
			//通过不断把堆中最大值放到数组的后面来排序
			while(N>0){
				exch(a,0,N--);
				sink(a,0,N);
			}
	}
	//下沉函数
	private static void sink(int[] a, int i, int n){
		while(2*i+1a[j]) break;
			exch(a,i,j);
			i=j;
		}
	}
	//交换函数
	private static void exch(int[] a, int i, int j){
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
}</a.length>

実行結果:

Javaのヒープソートとは何ですか?ヒープソートの概要

以上がJavaのヒープソートとは何ですか?ヒープソートの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。