打印排序(升序)浮动数据,包括每个索引

时间:2016-10-23 22:39:45

标签: java arrays sorting

定位峰的方法有很多种。考虑一组数据x []。对于我们的项目,我们将峰值定义为数组的元素,该元素是局部最大值,比其每个邻居大2或更多。数组中的第一个和最后一个元素每个只有一个邻居,根据定义,它们不能是峰值。因此,给定此数组x []包含20个元素:

0.20 0.50 0.10 0.15 0.20 0.13 0.30 0.25 0.30 0.30(元素0-9)

0.70 0.20 0.45 0.15 0.20 0.85 0.30 0.65 0.20 0.10(元素10-19)

峰值为x [1] = 0.5,x [10] = 0.7,x [12] = 0.45,x [15] = 0.85,x [17] = 0.65。

对于此项目,您将编写一个程序,该程序扫描数据数组,根据上面定义的标准查找峰值,并且(对于额外信用)将它们按升序排序。这是你的程序应该做的:

声明并初始化20个浮点数的数组x []。

float [] x = {0.2f,0.5f,0.1f,0.15f,0.2f,0.13f,0.3f,0.25f,0.3f,0.3f, 0.7f,0.2f,0.45f,0.15f,0.2f,0.85f,0.3f,0.65f,0.2f,0.1f};

在每一行上打印x [],10的元素,精度为2位小数。

在x []中找到峰值,并将它们的索引存储在名为peaks []的数组中。

按照它们在x []中出现的顺序打印每个峰的索引和数据。

到目前为止,我的代码如下:

    float[] x = {0.2f, 0.5f, 0.1f,  0.15f, 0.2f, 0.13f, 0.3f, 0.25f, 0.3f, 0.3f,
                 0.7f, 0.2f, 0.45f, 0.15f, 0.2f, 0.85f, 0.3f, 0.65f, 0.2f, 0.1f};

    int numPeaks = 0;   // Amount of peaks found.
    int[] peaks = new int[x.length];

    System.out.println("Data array:");  // Print header.

    // Print out data.
    for (int i = 0; i < x.length; i++) {
        System.out.printf("%.2f ", x[i]);
        if (i == (x.length - 1) / 2) {
            System.out.println();
        }
    }
    System.out.println("\n");   // Double line break.

    // Search for peaks and stores them into peaks[i].
    // Also counts how many peaks there are.
    for (int i = 1; i < x.length - 1; i++) {
        if (x[i] > (x[i-1] * 2) && x[i] > (x[i+1] * 2)) {
            numPeaks++;
            peaks[i] = i;
        }
    }
    // Print number of peaks found.
    System.out.println(numPeaks + " peaks found:");

    // Print only the peaks found along with their indices.
    for (int i = 1; i < x.length - 1; i++) {
        if (x[i] > (x[i-1] * 2) && x[i] > (x[i+1] * 2)) {
            System.out.printf("%2d", peaks[i]);
            System.out.println(" " + x[i]);
        }
    }

和输出:

Data array:
0.20 0.50 0.10 0.15 0.20 0.13 0.30 0.25 0.30 0.30 
0.70 0.20 0.45 0.15 0.20 0.85 0.30 0.65 0.20 0.10 

5 peaks found:
 1 0.5
10 0.7
12 0.45
15 0.85
17 0.65

我希望输出看起来像这样:

Data array:
0.20 0.50 0.10 0.15 0.20 0.13 0.30 0.25 0.30 0.30
0.70 0.20 0.45 0.15 0.20 0.85 0.30 0.65 0.20 0.10

5 peaks found:
 1 0.5
10 0.7
12 0.45
15 0.85
17 0.65

Sorted peaks:
12 0.45
 1 0.5
17 0.65
10 0.7
15 0.85
17 0.65

我似乎无法正确地将元素索引附加到已排序的浮动数据。如果有人可以提供帮助,请提前致谢。

如果有任何我遗漏的信息,请询问

1 个答案:

答案 0 :(得分:0)

此处的解决方案是使用比较原始数据中的值的比较对您peaks数组进行排序。

如果您使用的是Java 8,则可以使用Integer个对象而不是int,然后使用比较器:

Integer[] peaks;
Arrays.sort(peaks, Comparator.comparing(i -> x[i]));

您可以在Java 7中执行相同的操作,但您需要创建自己的比较器。