package algorithm.sort;
import utils.com.ArrayLister;
import utils.com.Swapper;
/**
* 堆排序
*
* @author Toy
*
*/
public class HeapSort_01 {
// System.out.println("Swap : "+a[i]+" "+a[2*i+1]);
/**
* 每轮都从堆中找到一个最大值存放到a[0]中
*
* @param a
* @param n
* @return
*/
public int[] maxHeap_01(int[] a, int n) {
int f = n / 2 - 1;
System.out.println(f);
for (int i = f; i >= 0; i--) {
if ((2 * i + 1) < n) {
if (a[i] < a[2 * i + 1]) {
Swapper.swap(a, i, 2 * i + 1);
}
}
if ((2 * i + 2) < n) {
if (a[i] < a[2 * i + 2]) {
Swapper.swap(a, i, 2 * i + 2);
}
}
}
return a;
}
/**
* 需要排序的数组
*
* @param a
* @return
*/
public int[] heapSort_01(int[] a) {
int n = a.length;
for (int i = n; i > 0; i--) {
System.out.println(i);
a = maxHeap_01(a, i);
Swapper.swap(a, 0, i - 1);
}
return a;
}
/**
* @param args
*/
public static void main(String[] args) {
int[] a = new int[] { 4, 3, 8, 10, 11, 13, 7, 30, 17, 26 };
HeapSort_01 s = new HeapSort_01();
ArrayLister.showArr(a);
a = s.heapSort_01(a);
ArrayLister.showArr(a);
}
}
堆排序
最新推荐文章于 2011-09-08 11:19:11 发布