일반적으로 사용되는 Java 정렬 알고리즘에 대한 자세한 설명
1. 선택 정렬(SelectSort)
기본 원리: 주어진 레코드 집합에 대해 첫 번째 비교 후 가장 작은 레코드를 얻은 다음 해당 레코드를 해당 레코드의 위치와 비교합니다. 첫 번째 레코드를 교환한 다음 첫 번째 레코드를 제외한 다른 레코드에 대해 두 번째 비교를 수행하여 가장 작은 레코드를 얻고 비교할 레코드가 하나만 있을 때까지 이 프로세스를 반복합니다.
public class SelectSort { public static void selectSort(int[] array) { int i; int j; int temp; int flag; for (i = 0; i < array.length; i++) { temp = array[i]; flag = i; for (j = i + 1; j < array.length; j++) { if (array[j] < temp) { temp = array[j]; flag = j; } } if (flag != i) { array[flag] = array[i]; array[i] = temp; } } } public static void main(String[] args) { int[] a = { 5, 1, 9, 6, 7, 2, 8, 4, 3 }; selectSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
2. InsertSort(InsertSort)
기본 원칙: 주어진 데이터 집합에 대해 처음에는 첫 번째 레코드가 순서가 있는 시퀀스만 있고 나머지 레코드는 순서가 없는 시퀀스입니다. 그런 다음 두 번째 레코드부터 시작하여 현재 처리 중인 레코드가 레코드 크기에 따라 순서대로 이전 레코드에 삽입되고 마지막 레코드가 정렬된 시퀀스에 삽입됩니다.
public class InsertSort { public static void insertSort(int[] a) { if (a != null) { for (int i = 1; i < a.length; i++) { int temp = a[i]; int j = i; if (a[j - 1] > temp) { while (j >= 1 && a[j - 1] > temp) { a[j] = a[j - 1]; j--; } } a[j] = temp; } } } public static void main(String[] args) { int[] a = { 5, 1, 7, 2, 8, 4, 3, 9, 6 }; // int[] a =null; insertSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
3. 버블 정렬(BubbleSort)
기본 원리: 주어진 n 레코드에 대해 첫 번째 레코드부터 시작 인접한 두 레코드를 비교합니다. 이전 레코드가 다음 레코드보다 크면 위치를 바꿉니다. 일련의 비교 및 전치 후에 n번째 레코드 중 가장 큰 레코드가 n번째 위치에 배치되고 이전(n-1) 레코드가 비교됩니다. 두 번째 비교 라운드에서는 비교할 레코드가 하나만 남을 때까지 이 과정을 반복합니다.
public class BubbleSort { public static void bubbleSort(int array[]) { int temp = 0; int n = array.length; for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } public static void main(String[] args) { int a[] = { 45, 1, 21, 17, 69, 99, 32 }; bubbleSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
4. MergeSort(MergeSort)
기본 원리: 재귀 및 분할 정복 기술을 사용하여 데이터 시퀀스를 더 작은 크기로 나눕니다. 더 작은 것들은 반 하위 테이블을 만들고, 반 하위 테이블을 정렬하고, 마지막으로 재귀적 방법을 사용하여 정렬된 반 하위 테이블을 점점 더 큰 순서의 순서로 병합합니다. 주어진 레코드 집합(총 n개 레코드로 가정)에 대해 먼저 길이가 1인 두 개의 인접한 하위 시퀀스를 모두 병합하여 길이가 2 또는 1인 n/2(반올림) 순서의 하위 시퀀스를 얻습니다. 하위 시퀀스를 2개씩 병합합니다. , 그리고 정렬된 순서가 얻어질 때까지 이 과정을 반복합니다.
public class MergeSort { public static void merge(int array[], int p, int q, int r) { int i, j, k, n1, n2; n1 = q - p + 1; n2 = r - q; int[] L = new int[n1]; int[] R = new int[n2]; for (i = 0, k = p; i < n1; i++, k++) L[i] = array[k]; for (i = 0, k = q + 1; i < n2; i++, k++) R[i] = array[k]; for (k = p, i = 0, j = 0; i < n1 && j < n2; k++) { if (L[i] > R[j]) { array[k] = L[i]; i++; } else { array[k] = R[j]; j++; } } if (i < n1) { for (j = i; j < n1; j++, k++) array[k] = L[j]; } if (j < n2) { for (i = j; i < n2; i++, k++) { array[k] = R[i]; } } } public static void mergeSort(int array[], int p, int r) { if (p < r) { int q = (p + r) / 2; mergeSort(array, p, q); mergeSort(array, q + 1, r); merge(array, p, q, r); } } public static void main(String[] args) { int a[] = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; mergeSort(a, 0, a.length - 1); for (int j = 0; j < a.length; j++) { System.out.print(a[j] + " "); } } }
5. 빠른 정렬(QuickSort)
기본 원칙: 주어진 레코드 집합에 대해 한 번의 정렬 과정을 거친 후 원본 시퀀스는 두 부분으로 나뉘는데, 앞 부분의 모든 레코드가 뒷 부분의 모든 레코드보다 작습니다. 그런 다음 두 부분의 레코드가 차례로 빠르게 정렬되고 프로세스는 순서가 맞습니다.
public class QuickSort { public static void sort(int array[], int low, int high) { int i, j; int index; if (low >= high) return; i = low; j = high; index = array[i]; while (i < j) { while (i < j && index <= array[j]) j--; if (i < j) array[i++] = array[j]; while (i < j && index > array[i]) i++; if (i < j) array[j--] = array[i]; } array[i] = index; sort(array, low, i - 1); sort(array, i + 1, high); } public static void quickSort(int array[]) { sort(array, 0, array.length - 1); } public static void main(String[] args) { int a[] = { 5, 8, 4, 6, 7, 1, 3, 9, 2 }; quickSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
6. 쉘 정렬(ShellSort)
기본 원리: 먼저 정렬할 배열 요소를 여러 하위 시퀀스로 나눕니다. 하위 시퀀스의 요소 수를 상대적으로 줄여 각 하위 시퀀스에 대해 직접 삽입 정렬을 수행한 후 정렬할 전체 시퀀스를 "기본적으로" 정렬한 후 최종적으로 모든 요소에 직접 삽입 정렬을 수행합니다.
public class ShellSort { public static void shellSort(int[] a) { int len = a.length; int i, j; int h; int temp; for (h = len / 2; h > 0; h = h / 2) { for (i = h; i < len; i++) { temp = a[i]; for (j = i - h; j >= 0; j -= h) { if (temp < a[j]) { a[j + h] = a[j]; } else break; } a[j + h] = temp; } } } public static void main(String[] args) { int a[] = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; shellSort(a); for (int j = 0; j < a.length; j++) { System.out.print(a[j] + " "); } } }
7. 최소 힙 정렬(MinHeapSort)
기본 원칙: 주어진 n개의 레코드에 대해 처음에는 이러한 레코드를 순차적으로 확인합니다. 저장된 이진 트리를 작은 최상위 힙으로 조정한 다음 힙의 마지막 요소를 힙의 최상위 요소와 교환합니다. 그런 다음 (n-1) 요소가 다시 사용됩니다. - 작은 최상위 힙으로 조정된 다음 힙의 최상위 요소가 현재 힙의 마지막 요소와 교환되어 다음으로 가장 작은 레코드를 얻습니다. 조정된 힙에 요소가 하나만 남을 때까지 이 프로세스를 반복합니다. 는 최대 기록이며, 이 시점에서 순서가 지정된 시퀀스를 얻을 수 있습니다.
public class MinHeapSort { public static void adjustMinHeap(int[] a, int pos, int len) { int temp; int child; for (temp = a[pos]; 2 * pos + 1 <= len; pos = child) { child = 2 * pos + 1; if (child < len && a[child] > a[child + 1]) child++; if (a[child] < temp) a[pos] = a[child]; else break; } a[pos] = temp; } public static void myMinHeapSort(int[] array) { int i; int len = array.length; for (i = len / 2 - 1; i >= 0; i--) { adjustMinHeap(array, i, len - 1); } for (i = len - 1; i >= 0; i--) { int tmp = array[0]; array[0] = array[i]; array[i] = tmp; adjustMinHeap(array, 0, i - 1); } } public static void main(String[] args) { int[] a = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; myMinHeapSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
위 글의 내용은 모두의 공부나 업무에 조금이라도 도움이 되었으면 좋겠습니다. PHP 중국어를 지원합니다!
일반적으로 사용되는 Java 정렬 알고리즘 및 관련 기사에 대한 자세한 설명은 PHP 중국어 웹사이트를 참고하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

JDBC 트랜잭션을 올바르게 처리하려면 먼저 자동 커밋 모드를 끄고 여러 작업을 수행 한 다음 결과에 따라 커밋 또는 롤백을 수행해야합니다. 1. 트랜잭션을 시작하려면 Conn.SetAutoCommit (False)에게 전화하십시오. 2. 인서트 및 업데이트와 같은 여러 SQL 작업을 실행합니다. 3. 모든 작업이 성공한 경우 Conn.commit ()에게 전화하여 데이터 일관성을 보장하기 위해 예외가 발생하면 Conn.Rollback ()에게 전화하십시오. 동시에, 재 시도는 리소스를 관리하고, 예외를 올바르게 처리하고, 연결 유출을 피하기 위해 긴밀한 연결을 사용하는 데 사용해야합니다. 또한 연결 풀을 사용하고 부분적으로 롤백을 달성하기 위해 저장 포인트를 설정하고 성능을 향상시키기 위해 거래를 가능한 한 짧게 유지하는 것이 좋습니다.

이전 날짜 및 달력 클래스를 대체하기 위해 Java.Time 패키지의 클래스를 사용하십시오. 2. LocalDate, LocalDateTime 및 LocalTime을 통해 현재 날짜와 시간을 얻으십시오. 3. () 메소드를 사용하여 특정 날짜와 시간을 만듭니다. 4. 플러스/마이너스 방법을 사용하여 시간을 불안정하게 늘리고 감소시킵니다. 5. ZonedDateTime 및 Zoneid를 사용하여 시간대를 처리하십시오. 6. DateTimeFormatter를 통해 형식 및 구문 분석 날짜 문자열; 7. 필요한 경우 이전 날짜 유형과 호환되도록 즉시 사용하십시오. 현대 Java의 날짜 처리는 명확하고 불변의 선형을 제공하는 Java.Timeapi 사용에 우선 순위를 부여해야합니다.

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

Adeadlockinjavaoccurswhentwoormorethreadsareblockedsforever,, 일반적으로, 일반적으로 duetocircularwaitcausedbyinconsentlockordering; thiscanbeptrededbectedbectedbectedbectedbectedbectefeartefournecessaryconditions —MutualExclusion, holdandwait, nopualwait, nopualclusion, nopualclusion

String.join () (Java8) 사용은 문자열 배열을 연결하는 가장 권장되는 방법입니다. 분리기를 직접 지정하십시오. 2. 이전 버전의 Java 또는 더 많은 제어가 필요한 경우 StringBuilder를 사용하여 수동으로 통과하고 스플 라이스를 사용할 수 있습니다. 3. StringJoiner는 접두사 및 접미사와 같은보다 유연한 형식이 필요한 시나리오에 적합합니다. 4. arrays.stream ()을 Collectors.joining ()과 결합하여 결합하기 전에 배열을 필터링하거나 변환하는 데 적합합니다. 요약하면, Java8 이상을 사용하는 경우, 대부분의 경우 String.join () 메소드를 선호해야하며 간결하고 읽기 쉽지만 복잡한 논리에는 권장됩니다.

importjava.ioandjava.net.socketfori/oandsocketcommunication.2.createOcketObjectToConnectToThEserUsingHostNameAndport.3.usepritWriterTerndAviaOutputStreamandBufferEdERDERDERDEREADSERVERRSPONSSFROMINPUTSTREAM.4.USTERTRETOR-resto-restocoUtomati

.quals () 메소드를 사용하여 문자열 내용을 비교하십시오. == 컨텐츠보다는 객체 참조 만 비교하므로; 1. .Equals ()를 사용하여 문자열 값을 동일하게 비교합니다. 2. .EqualSignoreCase ()를 사용하여 사례를 무시하는 것을 비교합니다. 3. .compareto ()를 사용하여 사전 순서로 문자열을 비교하고 0, 음수 또는 양수 숫자를 반환합니다. 4. .comparetoignorecase ()를 사용하여 사례 무시를 비교합니다. 5. Objects.equals () 또는 안전한 호출 방법을 사용하여 널 포인터 예외를 피하기 위해 널 문자열을 처리합니다. 요컨대, 문자열 내용 비교에는 ==를 사용하지 않아야합니다.

Java 's Garbage Collection (GC)은 메모리를 자동으로 관리하는 메커니즘으로, 도달 할 수없는 물체를 되 찾아서 메모리 누출의 위험을 줄입니다. 1.GC는 루트 객체 (예 : 스택 변수, 활성 스레드, 정적 필드 등)에서 객체의 접근성을 판단하며, 도달 할 수없는 객체는 쓰레기로 표시됩니다. 2. 마크 클리어링 알고리즘을 기반으로, 모든 도달 가능한 객체와 표시되지 않은 개체를 표시하십시오. 3. 세대 수집 전략 채택 : 새로운 세대 (Eden, S0, S1)는 종종 미성년자를 실행합니다. 노인은 성능이 적지 만 MajorGC를 수행하는 데 시간이 더 걸립니다. Metaspace는 클래스 메타 데이터를 저장합니다. 4. JVM은 다양한 GC 장치를 제공합니다. SerialGC는 소규모 응용 프로그램에 적합합니다. ParallelGC는 처리량을 향상시킵니다. CMS가 줄어 듭니다
