HOWTO · Java

Java에서 버블 정렬 알고리즘을 사용하여 수동 연결 목록 정렬

먼저 노드 예제를 통해 Java의 버블 정렬 알고리즘에 대해 설명합니다. 그런 다음 두 가지 방법을 실행하여 수동 버블 정렬 알고리즘을 사용하여 연결 목록을 정렬하는 방법을 보여줍니다.

이 페이지의 내용

버블 정렬은 데이터 수집을 정렬하는 데 사용되는 가장 일반적인 데이터 구조 알고리즘입니다. 인접 요소가 정확할 때까지 잘못된 순서로 반복하고 교체하여 작동합니다.

먼저 기본적인 정렬 데모를 보여드리겠습니다. 그런 다음 Java에서 연결 목록을 정렬하기 위해 두 가지 버블 정렬 알고리즘을 구현합니다.

Java의 버블 정렬

정렬의 산술적 측면에 빠지지 않고 필수 사항을 유지합시다. 버블 정렬에서 처음부터 최종 색인까지 배열을 탐색합니다.

그러면 현재 색인을 다음 색인과 비교할 수 있습니다. 이 공식의 핵심 개념은 현재 요소가 다음 요소보다 크기가 커질 때입니다.

통사론:

for (int A = 0; A < sort - 1; A++)
  for (int B = 0; B < sort - A - 1; B++)
    if (DEMO[B] > DEMO[B + 1]) {
      // Swapping of array
      int temp = DEMO[B];
      DEMO[B] = DEMO[B + 1];
      DEMO[B + 1] = temp;
    }
메모
루프를 사용하여 위의 공식을 적용하여 요소를 순회합니다. 이 단계에서 교환 및 횡단합니다.

이제 Java에서 간단한 버블 정렬 알고리즘을 실행해 보겠습니다. 그러나 먼저 배열의 정렬되지 않은 인덱스의 초기 상태를 살펴보십시오.

배열: {43, 65, 21, 64, 12, 6, 1}

다음 코드 블록은 이 기본 정렬 알고리즘을 적용하여 이 배열 인덱스에 대해 버블 정렬을 수행합니다.

요구 사항에 따라 이 공식을 항상 수정할 수 있습니다. 그러나 핵심은 이 순간에 명확성을 형성하기 위해 기본적으로 남아 있어야 합니다.

암호:

// In this program, we will sort an array DEMO using the bubble sort algorithm
// Main class
public class BubbleSortLinkListExample1 {
  // Main function
  private void bubbleSort(int DEMO[]) {
    // Using .length to determine entire length of array's index
    int sort = DEMO.length;
    // If array's length is less than int sort, increase it by 1
    for (int A = 0; A < sort - 1; A++)
      // Formula 1
      for (int B = 0; B < sort - A - 1; B++)
        if (DEMO[B] > DEMO[B + 1]) {
          // Swapping of array
          int temp = DEMO[B];
          DEMO[B] = DEMO[B + 1];
          DEMO[B + 1] = temp;
        }
  }
  /* Now we are going to print DEMO array*/
  void printArray(int DEMO[]) {
    int sort = DEMO.length;
    for (int A = 0; A < sort; ++A) System.out.print(DEMO[A] + " ");
    System.out.println();
  }
  // We are going to implement a driver algorithm for sorting our DEMO array
  public static void main(String args[]) {
    BubbleSortLinkListExample1 ob = new BubbleSortLinkListExample1();
    int DEMO[] = {43, 65, 21, 64, 12, 6, 1};
    ob.bubbleSort(DEMO);
    System.out.println("After the array has been sorted!");
    ob.printArray(DEMO);
  }
}

이 배열을 오름차순으로 정렬한 후 Java의 출력을 얻습니다.

출력:

After the array has been sorted!
1 6 12 21 43 64 65

Java의 버블 정렬 수동 연결 목록

연결 목록 수동 정렬도 버블 정렬의 간단한 방법입니다.

이전에 데이터 탐색에 대해 논의한 적이 있습니까? 이제 실천해 보겠습니다.

노드를 사용하면 한 노드에서 다음 노드로 데이터를 이동할 수 있습니다.

아래 데모 모델을 살펴보십시오. 이전 예제에서 정렬을 수행했으므로 여기서 노드를 강조하는 것이 중요합니다.

버블 정렬 노드 데모

Java의 클래스 정렬 연결 목록

이해했듯이 이 클래스를 적용하여 Java에서 노드를 형성합니다.

암호:

class SortLL {
  public static class Mynode {
    int indx;
    Mynode fwdMynode;

    public Mynode(int indx) {
      this.indx = indx;
      this.fwdMynode = null;
    }
    public int getindx() {
      return this.indx;
    }
  }
메모
수동 정렬 외에도 노드를 수락하고 그에 따라 다음 인스턴스 변수를 설정하는 .setNextNode() 함수도 사용할 것입니다.

이러한 클래스를 별도로 사용하고 해당 개체를 호출할 수 있지만 이는 길고 복잡한 방법입니다. 따라서 모든 클래스를 하나의 파일에 보관했습니다.

마찬가지로 .getNextNode() 함수를 사용하여 인수 없이 다음 클래스 요소를 검색합니다. 개념에 익숙해야하므로 더 이상 고민하지 않고 수동 버블 정렬 알고리즘을 실행해 보겠습니다.

  1. 정렬 전 연결 목록:

    수동 버블 정렬 이전의 연결 목록

    암호:

    class SortLL {
      public static class Mynode {
        int indx;
        Mynode fwdMynode;
    
        public Mynode(int indx) {
          this.indx = indx;
          this.fwdMynode = null;
        }
        public int getindx() {
          return this.indx;
        }
      }
      // My node class
      private Mynode head;
      private int size;
      public SortLL() {
        this.head = null;
        this.size = 0;
      }
      public void add(int indx) {
        Mynode Mynode = new Mynode(indx);
        if (head == null) {
          head = Mynode;
        } else {
          Mynode CN = head;
          while (CN.fwdMynode != null) {
            CN = CN.fwdMynode;
          }
          CN.fwdMynode = Mynode;
        }
        size++;
      }
      public void sort() {
        if (size > 1) {
          boolean dtr;
          do {
            Mynode thisMynode = head;
            Mynode ladtMynode = null;
            Mynode fwd = head.fwdMynode;
            dtr = false;
    
            while (fwd != null) {
              if (thisMynode.indx > fwd.indx) {
                dtr = true;
                if (ladtMynode != null) {
                  Mynode sig = fwd.fwdMynode;
    
                  ladtMynode.fwdMynode = fwd;
                  fwd.fwdMynode = thisMynode;
                  thisMynode.fwdMynode = sig;
                } else {
                  Mynode sig = fwd.fwdMynode;
                  head = fwd;
                  fwd.fwdMynode = thisMynode;
                  thisMynode.fwdMynode = sig;
                }
                ladtMynode = fwd;
                fwd = thisMynode.fwdMynode;
              } else {
                ladtMynode = thisMynode;
                thisMynode = fwd;
                fwd = fwd.fwdMynode;
              }
            }
          } while (dtr);
        }
      }
      public int listSize() {
        return size;
      }
      public void printindx() {
        Mynode CN = head;
    
        while (CN != null) {
          int indx = CN.getindx();
          System.out.print(indx + " ");
          CN = CN.fwdMynode;
        }
        System.out.println();
      }
      public boolean isEmpty() {
        return size == 0;
      }
    }
    // indxInterface class
    class SrtBubb {
      public static void main(String[] args) {
        SortLL s = new SortLL();
        s.add(12);
        s.add(2);
        s.add(7);
        s.add(19);
        s.add(23);
        s.add(9);
        System.out.println("Before Performing Bubble Sort");
        s.printindx();
        s.sort();
        System.out.println("After Performing Bubble Sort");
        s.printindx();
        System.out.println("Size of the linked list is: " + s.listSize());
      }
    }
    
  2. 수동 버블 정렬을 수행한 후:

    수동 버블 정렬 후 링크 목록

    출력:

    Before Performing Bubble Sort
    12 2 7 19 23 9
    After Performing Bubble Sort
    2 7 9 12 19 23
    Size of the linked list is: 6
    

요구 사항에 따라 이 프로그램을 수정할 수 있습니다. 그러나 이것은 버블 정렬을 사용하여 연결 목록을 수동으로 정렬하는 방법을 초보자가 이해하는 가장 실용적인 방법입니다.

이 주제에 대해 여전히 혼란스럽다고 가정합니다. 파일 디렉토리에 코드도 제공했습니다.