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

Sarwan Soomro 2024년2월15일
  1. Java의 버블 정렬
  2. Java의 버블 정렬 수동 연결 목록
  3. 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
    

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

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

Sarwan Soomro avatar Sarwan Soomro avatar

Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.

LinkedIn

관련 문장 - Java List