Javaデータ構造とアルゴリズム--(59)スタックソート
スタック並べ替えの時間的複雑さはO(nlogn)である.
一、コード
二、結果
一、コード
package tree;
import java.util.Arrays;
/**
*
* 1. ( , )。 , 。
* 2. , 。
* 3. n-1 ( , ), n 。 , 。
* @author Lee
*
*/
public class HeapSort {
/**
*
* 1. 。 ( , )。
* 2. , 。
* 3. ( , ), , 。 、 、 。
* @param args
*/
//
// 1. , 。
// 2. , " " 。
// 3. , , , + , 。
public static void main(String[] args) {
// ,
int[] arr = {4, 6, 8, 5, 9, 10, -2, 9, 25, 62};
System.out.println(" :" + Arrays.toString(arr));
heapSort(arr);
System.out.println(" :" + Arrays.toString(arr));
}
// :
public static void heapSort(int[] arr) {
System.out.println("-------------------- --------------------");
/*
//
//
adjustHeap(arr, 1, arr.length);
System.out.println(" " + Arrays.toString(arr));
//
adjustHeap(arr, 0, arr.length);
System.out.println(" " + Arrays.toString(arr));
// ,
*/
// 1. 。 , 。
/*
* :
* 1. , (arr.length / 2 - 1) , ,
* 2. for , , arr[0]
*/
for(int i = arr.length / 2 - 1; i >= 0; i--) {
adjustHeap(arr, i, arr.length);
}
// 2. arr[0] arr[arr.length - 1] , " " + ,
// :j
for(int j = arr.length - 1; j > 0; j--) {
// 1.
// : ,arr[0]
int temp = arr[j];
arr[j] = arr[0];
arr[0] = temp;
//2.
// : i 0 , i
adjustHeap(arr, 0, j);
}
}
// :
/**
* : i , 。i
* :int[] arr = {4, 6, 8, 5, 9} => i = 1 => adjustHeap(arr, i, arr.length) => arr = {4, 9, 8, 5, 6}
* adjustHeap, i = 0 => ,arr = {4, 9, 8, 5, 6} => arr = {9, 6, 8, 5, 4}( )
* @param arr
* @param i ( )
* @param length , ,length
*/
public static void adjustHeap(int[] arr, int i, int length) {
int temp = arr[i];// , temp
//
//
// 1. for : ,
// 2. , i k, k = i * 2 + 1
// 3. , i , k = k * 2 + 1
// 4. for , ,
// 5. for , i ,i ( )
for(int k = i * 2 + 1; k < length; k = k * 2 + 1) {
//
// 1. i
// 2. , i , , arr[k + 1] < length
// 3. , k
if(k + 1 < length && arr[k] < arr[k + 1]) {// , k
k++;// k
}
if(arr[k] > temp) {// , ( )
arr[i] = arr[k];// ( )
i = k;// i K,
}else {// arr[k] <= temp, i (temp)
break;// , ,
}
}
// for , i ,i ( )
// for ,i k, arr[i] ( temp ) arr[i],
arr[i] = temp;// temp
}
}
二、結果
:[4, 6, 8, 5, 9, 10, -2, 9, 25, 62]
-------------------- --------------------
:[-2, 4, 5, 6, 8, 9, 9, 10, 25, 62]