java - 如何跟踪 Java 中插入排序算法实现的持续时间?

标签 java sorting insertion-sort

我需要一些有关 Java 中插入排序算法实现的帮助。 我有一个巨大的文件,其中包含 BigInteger在每一行中。该文件的大小约为 250 MB。 我的目标是将这些值存储在 ArrayList<BigInteger> 中然后排序 ArrayList使用insertSort开发如下:

    /**
 * Method insertionSort
 * This method sorts ArrayList list made of generic T elements
 * @param list the ArrayList to be sorted
 */
public static <T extends Comparable<T>> void insertionSort(ArrayList<T> list){
    T temp;
    int position;
    for(int i = 1; i < list.size(); i++){
        temp = list.get(i);
        position = i;
        while(position > 0 && list.get(position-1).compareTo(temp) > 0){
            //Shift bigger values to the right
            list.set(position, list.get(position-1));
            position--;
        }
        list.set(position, temp);
    }
}

我还需要跟踪排序方法的持续时间。例如: 比方说x是排序完成的百分比,y方法完成其工作所需的秒数。

while(method is sorting){
    System.out.println("Sorting started...");
    ***Sorting in Progress***
    System.out.println("Method has sorted x% of ArrayList");
    ***Sorting Method keeps doing its job***
    System.out.println("Method has sorted x% of ArrayList");
    ***Sorting Method keeps doing its job***
    System.out.println("Method has sorted 100% of ArrayList");
    System.out.println("It took y seconds to sort the provided ArrayList");
}

现在我的问题是:如何在方法运行时跟踪该算法的持续时间和完成排序的百分比? 希望我已经说清楚了,你们可以帮助我。 谢谢

最佳答案

这是一个完整的解决方案,具有百分比记录和时间测量:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App {
    /**
     * Method insertionSort
     * This method sorts ArrayList list made of generic T elements
     * @param list the ArrayList to be sorted
     */
    public static <T extends Comparable<T>> void insertionSort(List<T> list){
        T temp;
        int position;
        int size = list.size();
        for(int i = 1; i < size; i++){
            temp = list.get(i);
            position = i;
            while(position > 0 && list.get(position-1).compareTo(temp) > 0){
                //Shift bigger values to the right
                list.set(position, list.get(position-1));
                position--;
            }
            list.set(position, temp);
            System.out.println("Sorting... " + ((double)i/(double)size)*100.0 + "%");
        }
    }

    public static void main(String args[]) {
        long startTime = System.nanoTime();

        List<Integer> list = new ArrayList<>(Arrays.asList(10,6,3,8,1,7,2,9,5,4));

        App.insertionSort(list);

        Double secondsLenght = (System.nanoTime()-startTime)/ Math.pow(10, 9);

        System.out.println(list);
        System.out.println("Sorting took " + secondsLenght + " seconds.");

    }
}

一些附加评论:

  • 为什么要实现自己的排序算法?

  • 您应该更改 insertionSort 的签名方法insertionSort(List<T> list) ,使其独立于 List实现。

  • 而不是做 println在函数内部,您应该实现某种执行更新的回调。

关于java - 如何跟踪 Java 中插入排序算法实现的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51556612/

相关文章:

java - 无法使用restclienttest模拟resttemplate调用

java - 创建完全动态的 GUI

c - c语言中如何将字符串插入到链表中

java - Spring Boot - KeyCloak 指向 403 forbidden

javascript - 冒泡排序只对数组的一部分进行排序

java - 对数组列表进行排序

mysql - 具有多个索引的Indexeddb排序

C++ 插入排序

sorting - 什么类型的输入区分插入排序和选择排序?

java - 从字节缓冲区中删除一些字节并返回相同的字节缓冲区