【专家解说】:package com.help;im
port java.util.Scanner;public class VariableSort
{ public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int x = input.nextInt();
int[] a = new int[x]; //这里是我输入的数组长度。所以产生出的a.length就会等于x
// int[] a = new int[20];
System.out.println("数组元素个数为:"+x);
for (int i = 0; i < 20; ++i)
a[i] = (int) (Math.random() * 10);
heapSort(a);
} static void swap(int[] a, int x, int y)
{
int t = a[x];
a[x] = a[y];
a[y] = t;
} static int maxHeapify(int[] a, int i, int n)
{
int l, r, c = 0, m;
do
{
r = 2 * (i + 1);
l = r - 1;
m = l < n && a[l] > a[i] ? l : i;
m = r < n && a[r] > a[m] ? r : m;
if (m != i)
{
swap(a, m, i);
++c;
i = m;
}
else
break;
} while (true); return c;
} static void heapSort(int[] a)
{
int n = a.length;
int c = 0;
for (int i = (n - 1) / 2; i >= 0; --i)
maxHeapify(a, i, n);
for (int i = n - 1; i > 0; --i)
{
swap(a, 0, i);
c = maxHeapify(a, 0, --n);
for (int j = 0; j < a.length; ++j)
System.out.print(a[j] + " ");
System.out.println("比较次数:" + (c + 1) * 2 + " 交换次数:" + c);
}
}
}
进一步了解相关内容你可以在站内搜索以下相关问题
- 编写程序使用快速排序算法对数组中的数据进行降序排序。要求...
- 用随机函数产生20个100以内的整数, 利用合并排序算法完成这...
- 求高手解决啊:随机产生n个数,用快速排序算法进行排序,并记录...
- 对1000W个元素,元素大小在0-999之间的随机数的数组进行排序...