병합 정렬이 정렬하는 데 너무 많은 시간이 걸리는 이유는 무엇입니까?

랑 구로

이 병합 정렬 버전을 최적화하려고 시도했지만 약 3 백만 개의 레지스터를 정렬하는 데 너무 오래 걸립니다. 내가 어디에서 잘못하고 있습니까? 도움을 주시면 감사하겠습니다.

Persona는 문자열과 Integer가있는 클래스입니다. 여러분이 저를 돕기 위해 알고 싶은 경우를 대비하여.

public class Mergesort {
  private ArrayList<Persona> numbers = new ArrayList();
  private  ArrayList<Persona> helper;
  private int number;
  private boolean ascending;


  public void sort(ArrayList<Persona> values, boolean ascending) {
    this.numbers = values;
    this.ascending = ascending;
    number = values.size();
    helper = new ArrayList();
    mergesort(0, number - 1);
  }

  /**
   * Determines the middle of the array to sort the left side and the right side 
   * Then it merges both arrays.
   * @param low
   * @param high 
   */
  private void mergesort(int low, int high) {
    // check if low is smaller then high, if not then the array is sorted
    if (low < high) {
      // Get the index of the element which is in the middle
      int middle = low + (high - low) / 2;
      // Sort the left side of the array
      mergesort(low, middle);
      // Sort the right side of the array
      mergesort(middle + 1, high);
      // Combine them both
      merge(low, middle, high);
    }
  }

  /**
   * Merges the arrays.
   * @param low
   * @param middle
   * @param high 
   */
  private void merge(int low, int middle, int high) {

    // Copy both parts into the helper array
    for (int i = low; i <= high; i++) {
          helper.add(i, numbers.get(i));
    }

    int i = low;
    int j = middle + 1;
    int k = low;
    // Copy the smallest values from either the left or the right side back
    // to the original array
    while (i <= middle && j <= high) {
      if ( helper.get(i).id  <= helper.get(j).id) {
        numbers.set(k, helper.get(i));
        i++;
      } else {
        numbers.set(k,helper.get(j));
        j++;
      }
      k++;
    }
    // Copy the rest of the left side of the array into the target array
    while (i <= middle) {
      numbers.set(k,helper.get(i));
      k++;
      i++;
    }
  }}
짐 개리슨

helper더 많은 데이터를 병합 할 때마다 (전역 적이 어서는 안되는) 내용을 지우지 않습니다. 메모리가 부족하지 않은 것이 정말 놀랍습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

병합 정렬이 정렬하는 데 너무 많은 시간이 걸리는 이유는 무엇입니까?

분류에서Dev

내 sqlite`업데이트 세트`에 너무 많은 시간이 걸리는 이유는 무엇입니까?

분류에서Dev

큰 폴더를 이동하는 데 많은 시간이 걸리는 이유는 무엇입니까?

분류에서Dev

InputStream.readObject가 직렬화 된 객체를 읽는 데 너무 많은 시간이 걸리는 이유

분류에서Dev

병렬 범위 처리가 Future 기반 병렬 처리보다 훨씬 더 많은 시간이 걸리는 이유는 무엇입니까 (N-queens 예)?

분류에서Dev

목록을 정렬하는 데 O (n) 시간이 걸리면 정렬 시도를 사용하지 않는 이유는 무엇입니까?

분류에서Dev

쿼리를로드하는 데 너무 많은 시간이 걸렸습니다.

분류에서Dev

주 메모리보다 하드 디스크에서 정보를 얻는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

분류에서Dev

주 메모리보다 하드 디스크에서 정보를 얻는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

분류에서Dev

기록을 찾는 데 너무 많은 시간이 걸리는 Mongodb

분류에서Dev

너무 많은 시간이 걸리고 엄청난 양의 데이터를 다운로드하는 pipenv는 설치 후 무엇을합니까?

분류에서Dev

Windows 7을 종료하는 데 너무 많은 시간이 걸리나요?

분류에서Dev

시간별로 데이터를 정렬하는 방법은 무엇입니까?

분류에서Dev

이 데이터 정렬을 정렬하는 방법은 무엇입니까?

분류에서Dev

자르는 데 너무 많은 시간이 걸립니다. hsqldb

분류에서Dev

DASK Delayed와 병합하는 데 DASK 내장 명령으로 병합하는 것보다 시간이 훨씬 더 걸리는 이유는 무엇입니까?

분류에서Dev

User.first가 처음으로 데이터베이스를 쿼리하는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

분류에서Dev

Promisify가 루프를 만드는 데 시간이 많이 걸리는 이유는 무엇입니까?

분류에서Dev

R에서 병렬 컴퓨팅으로 ML 코드를 실행하는 데 걸리는 시간을 추정하는 방법은 무엇입니까?

분류에서Dev

셀을 업데이트하는 데 너무 많은 시간이 걸리는 테이블 다시로드

분류에서Dev

vbox를 설정하는 데 많은 시간이 걸리고 너무 느린 우분투 VM 시작

분류에서Dev

많은 수의 사본을 인쇄하는 데 CUPS가 처리하는 데 시간이 오래 걸리는 이유는 무엇입니까?

분류에서Dev

데이터 그리드에 데이터를로드하는 데 너무 많은 시간이 걸립니다.

분류에서Dev

내 앱을 설치하는 데 시간이 너무 오래 걸리는 이유는 무엇입니까?

분류에서Dev

데이터를 검색하는 데 너무 많은 시간이 걸리는 MongoDB 쿼리

분류에서Dev

너무 많은 시간이 걸리는 캐싱 / 쿼리 점화

분류에서Dev

너무 많은 시간이 걸리는 MySQL 쿼리

분류에서Dev

직렬 실행이 병렬보다 시간이 적게 걸리는 이유는 무엇입니까?

분류에서Dev

로그인이 성공하는 것보다 실패하는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    병합 정렬이 정렬하는 데 너무 많은 시간이 걸리는 이유는 무엇입니까?

  2. 2

    내 sqlite`업데이트 세트`에 너무 많은 시간이 걸리는 이유는 무엇입니까?

  3. 3

    큰 폴더를 이동하는 데 많은 시간이 걸리는 이유는 무엇입니까?

  4. 4

    InputStream.readObject가 직렬화 된 객체를 읽는 데 너무 많은 시간이 걸리는 이유

  5. 5

    병렬 범위 처리가 Future 기반 병렬 처리보다 훨씬 더 많은 시간이 걸리는 이유는 무엇입니까 (N-queens 예)?

  6. 6

    목록을 정렬하는 데 O (n) 시간이 걸리면 정렬 시도를 사용하지 않는 이유는 무엇입니까?

  7. 7

    쿼리를로드하는 데 너무 많은 시간이 걸렸습니다.

  8. 8

    주 메모리보다 하드 디스크에서 정보를 얻는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

  9. 9

    주 메모리보다 하드 디스크에서 정보를 얻는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

  10. 10

    기록을 찾는 데 너무 많은 시간이 걸리는 Mongodb

  11. 11

    너무 많은 시간이 걸리고 엄청난 양의 데이터를 다운로드하는 pipenv는 설치 후 무엇을합니까?

  12. 12

    Windows 7을 종료하는 데 너무 많은 시간이 걸리나요?

  13. 13

    시간별로 데이터를 정렬하는 방법은 무엇입니까?

  14. 14

    이 데이터 정렬을 정렬하는 방법은 무엇입니까?

  15. 15

    자르는 데 너무 많은 시간이 걸립니다. hsqldb

  16. 16

    DASK Delayed와 병합하는 데 DASK 내장 명령으로 병합하는 것보다 시간이 훨씬 더 걸리는 이유는 무엇입니까?

  17. 17

    User.first가 처음으로 데이터베이스를 쿼리하는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

  18. 18

    Promisify가 루프를 만드는 데 시간이 많이 걸리는 이유는 무엇입니까?

  19. 19

    R에서 병렬 컴퓨팅으로 ML 코드를 실행하는 데 걸리는 시간을 추정하는 방법은 무엇입니까?

  20. 20

    셀을 업데이트하는 데 너무 많은 시간이 걸리는 테이블 다시로드

  21. 21

    vbox를 설정하는 데 많은 시간이 걸리고 너무 느린 우분투 VM 시작

  22. 22

    많은 수의 사본을 인쇄하는 데 CUPS가 처리하는 데 시간이 오래 걸리는 이유는 무엇입니까?

  23. 23

    데이터 그리드에 데이터를로드하는 데 너무 많은 시간이 걸립니다.

  24. 24

    내 앱을 설치하는 데 시간이 너무 오래 걸리는 이유는 무엇입니까?

  25. 25

    데이터를 검색하는 데 너무 많은 시간이 걸리는 MongoDB 쿼리

  26. 26

    너무 많은 시간이 걸리는 캐싱 / 쿼리 점화

  27. 27

    너무 많은 시간이 걸리는 MySQL 쿼리

  28. 28

    직렬 실행이 병렬보다 시간이 적게 걸리는 이유는 무엇입니까?

  29. 29

    로그인이 성공하는 것보다 실패하는 데 더 많은 시간이 걸리는 이유는 무엇입니까?

뜨겁다태그

보관