이 기사는 주로 Java가 일반적으로 사용되는 정렬 알고리즘을 달성하는 방법을 소개합니다. 정렬 삽입, 버블 링 정렬, 힐 정렬 선택, 빠른 분류, 합병 정렬, 스태킹 순서 및 LST 기본 정렬을 공유합니다.
분류
1) 정렬 삽입 (직접 삽입 된 정렬, 언덕 정렬)
2) 교환 분류 (버블 링 분류, 빠른 분류)
3) 정렬 선택 (직접 정렬, 스택 정렬을 선택)
4) 정렬을 병합하십시오
5) 분포 및 정렬 (기본 정렬)
필요한 보조 공간이 가장 중요합니다 : 합병 및 정렬을위한 가장 보조 공간 : 스태킹 순서의 가장 빠른 경기 속도 : 빠른 정렬
불안정 : 빠르게 정렬, 언덕 정렬, 쌓인 정렬.
8 정렬의 관계를 살펴 보겠습니다.
1. 직접 정렬을 삽입하십시오
(1) 기본 아이디어 : 정렬 할 세트 중에서 (n-1) [n> = 2] 숫자가 이미 행이라고 가정합니다.
순서대로 NN 번호는 이전 주문에 삽입 되어이 N 번호가
또한 순서입니다. 전체 순서가 순서대로 될 때까지 반복적으로 순환됩니다.
(2) 예
(3) Java와 함께 실현하십시오
com.njue; publicclass insertsort {public insertsort () {inta [] = {49,38,65,97,76,49,34,64,4,4,62,99, 98,54,56, 17,18,34,35,35,53,51}; temp = a [i]; test;} for (int i = 0; i <a.length; i ++) {System.out.println (a [i]);}}}}2. 힐 정렬 (최소 증분 정렬)
(1) 기본 아이디어 : 알고리즘으로 분류 할 그룹의 수는 증가 된 D의 수에 따라 여러 그룹으로 나뉩니다 (그룹의 모든 요소가 직접 삽입됩니다 정렬 한 다음 더 작은 증가 (d/2)를 사용하여 그룹화 한 다음 각 그룹에 직접 정렬을 삽입하십시오. 증분이 1으로 축소되면 정렬이 직접 삽입되고 정렬이 완료됩니다.
(2) 예 :
(3) Java와 함께 실현하십시오
publicclass shellsort {publicshellsort () {int a [] = {1,54,3,34,12,45,100}; .ceil (d1/2); int x = 0; x <d; x ++) { ) {int j = id; j+d] = temp;}} if (d == 1) {break;} for (int i = 0; i <a.length; i ++) {system.out.println (a [i]);} }}3. 간단한 정렬 선택
(1) 기본 아이디어 : 분류 할 그룹에서 가장 적은 수의 숫자 수와 첫 번째 위치를 선택하십시오.
그런 다음 루프가 마지막 숫자의 마지막 숫자와 마지막 숫자와 비교되도록 나머지 숫자에서 두 번째 위치의 가장 작은 숫자를 찾으십시오.
(2) 예 :
(3) Java와 함께 실현하십시오
public class selectsort {public selectSort () {int a [] = {1,54,3,34,12,45}; ) {int J = i+1; J]; pose =;}} [posity] = a [i] = test;} (int i = 0; i ++) systerm.println. 나] );}}4. 힙 분류
(1) 기본 아이디어 : 포장 분류는 트리 모양의 분류 선택으로 직접적인 분류를 효과적으로 개선하는 것입니다.
힙의 정의는 다음과 같습니다 : N 요소가있는 시퀀스 (H1, H2, ..., HN), 만족 한 (hi> = h2i, hi> = 2i+1) 또는 (hi <= h2i, hi <= 2i 2i) +1) (i = 1,2, ..., n/2)를 더미라고합니다. 여기서 우리는 전자의 조건을 충족시키는 더미에 대해서만 논의합니다. 힙의 정의에서 상단 요소 (즉, 첫 번째 요소)가 가장 큰 항목 (큰 상단 덤프)이어야한다는 것을 알 수 있습니다. 완전한 이진 트리는 힙의 구조를 직관적으로 표현할 수 있습니다. 더미의 상단은 뿌리 내리고 다른 하나는 서브 트리와 오른쪽 하위 트리입니다. 처음에 분류 할 시퀀스는 순서대로 저장된 이진 트리로 간주되어 스토리지 순서를 조정하여 더미가됩니다. 그런 다음 루트 노드를 힙의 마지막 노드로 교환하십시오. 그런 다음 이전 (N-1) 숫자를 다시 조정하여 더미로 만듭니다. 이 유형에 따르면, 노드가 두 개만있을 때까지 교환하고 마침내 N 노드의 순서대로 순서대로 얻습니다. 알고리즘 설명의 관점에서, 스태킹 시퀀싱은 두 개의 프로세스가 필요하고 다른 하나는 상단과 파일의 마지막 요소 교환 위치입니다. 따라서 힙 분류의 두 가지 기능 구성이 있습니다. 하나는 파일의 침투 함수이고, 다른 하나는 정렬 함수를 구현하기 위해 침투 함수를 반복적으로 호출하는 것입니다.
(2) 예 :
초기 순서 : 46,79,56,38,40,84
건설:
교환, 파일에서 최대 숫자를 차십시오
나머지 노드는 다시 빌드되고 최대 숫자가 교환됩니다.
순서대로 푸시 : 마지막 두 노드의 마지막 더미에있는 마지막 두 노드가 교환되고, 하나는 쫓겨나고 정렬이 완료됩니다.
(3) Java와 함께 실현하십시오
java.util.arrays {inta [] = {49,38,65,97,27,78,34,264,4,62,98,54, 56,17,18,23,34 , 15,35,25,53,51}; 길이; // 내장 (int i = 0; i <arraylength-; i ++) {// a, arraylength-i); 0, arraylength-i); system.out.println (arrays.tostring (a));}} private void swap (int [] data, int i, int j, int j, int j) {// todo auto- generalted method int tmp = data [i] = data [j] = tmp;} // 0에서 lastindex buildmaxheap (int [] data, int lastindex. ) {// todo auto-gonement method stub // lastIndex start (int i = (lastIndex-); i> = 0; i-)의 노드 (마지막 노드)의 상위 노드 (마지막 노드) {// k 노드 저장 int k = i; // 현재 k 노드의 하위 노드가 존재하는 동안 (k*2+1 <= lastIndex) {// k 노드의 왼쪽 하위 노드 인덱스 int biggerindex = 2*k+1; 더 큰 인덱스는 LastIndex보다 작습니다. 즉, BiggerIndex+1으로 표시되는 k 노드를 나타내는 k 노드의 오른쪽 노드는 (BiggerIndex <lastIndex) {// 오른쪽 노드의 값이 더 크면 (데이터 [biggerindex. ] <data [biggerindex+1]) {// BiggerIndex는 항상 인덱스 BiggerIndex ++;}를 기록합니다. ] <data [biggerindex]) {// 스왑 (data, k, biggerindex); 왼쪽 및 오른쪽 노드의 값보다 k = biggerindex;} else {break;}}}}.5. 버블 분류
(1) 기본 아이디어 : 분류 할 그룹에서는 아직 배출되지 않은 범위 내의 모든 숫자가 위에서 아래로 인접한 두 숫자의 두 숫자를 비교 및 조정하여 더 큰 것들이 더 작은 가라 앉게되도록합니다. 즉, 두 개의 인접한 숫자가 비교 될 때마다 정렬 및 정렬 요구 사항이 반대이며 교환 할 것임을 알게됩니다.
(2) 예 :
(3) Java와 함께 실현하십시오
Public Class Bubblesort {publicbbitsort () {inta [] = {49,38,65,97,76,13,49,78,34,4,4,62,98,54,56, 17,18,23 , 34,15,35,53,51}; longe-1-i; j ++) {if (a [j]> [j+1]) {a [j] = a [j j +1] = temp;}}} for (int i = 0; i <a.length; i ++) {system.out.println (a [i]);}}6. 빠르게 정렬하십시오
(1) 기본 아이디어 : 벤치 마크 요소를 선택하십시오. 일반적으로 첫 번째 요소 또는 마지막 요소를 선택하십시오. 벤치 마크 요소 요소. 요소가 순위가 매겨지고 두 부분이 같은 방식으로 정렬됩니다.
(2) 예 :
(3) Java와 함께 실현하십시오
Publicclass QuickSort {inta [] = {49,38,65,97,76,13,27,78,34,264,5,4,99,98,54,56,17,34,15,35,25 , 53,51}; PublicQuickSort (a); [] 목록, int low) {int tmp = list [low]; // 중앙 축으로서의 첫 번째 배열 (low <high && list) [High]> = tmp) { High-;} list [low] = List [High]; // 중간 샤프트보다 작은 레코드가 저쪽으로 이동합니다 (Low <High && list [low] <= tmp) {Low ++;} 목록. [High] = LOW [LOW]; // 중간 샤프트보다 큰 레코드가 High -End} 목록으로 이동합니다. [LOW] = TMP; int low, int high) {if (low <high) {int middle = getmiddle (list, low, high); 낮은 -character tables_quicksort의 정렬 (목록, 중간 + 1, High); 배열은 empty_quicksort (a2,0, a2.length -1);}}}입니다.7. 정렬을 병합하십시오
(1) 기본 정렬 : 첨부 파일 (병합) 분류 방법은 두 개 이상의 양식을 새로운 순서, 즉 서문으로 병합하는 것입니다. 그런 다음 주문 시퀀스를 전체 순서로 결합하십시오.
(2) 예 :
(3) Java와 함께 실현하십시오
java.util.arrays; publicclass mergingsort {inta [] = {49,38,65,97,27,78,34,264,4,62,98,54, 56,17,18,23,34 , 15,35,25,53,51}; (a [i]);} publicvoid sort (int [] data, int left, int right) {// todo-goneraltedmethod stub if (왼쪽 <오른쪽) { / / / 찾기 중간 인덱스 int center = (왼쪽+오른쪽) // 왼쪽 배열에서 재귀 적으로 정렬됩니다 (데이터, 중앙+1, 오른쪽). ;}} publicvoid merge (int [] data, int left, int center) {// int mid = center+1; 중간 배열 int project = int tmp = 왼쪽; ]) {tmparr [Third ++] = data [left ++];} else {tmparr [Third ++] = data [mid ++] {tmparr [Third ++] = data [mid ++];} while (left <= center) {tmparr [Third ++] = data [left ++] {data [tmp] = tmparr [tmp ++];} system.out. println (arrays.tostring (data));8. 기본 분류
(1) 기본 아이디어 : 균일 한 모든 비교 값 (양수 정수)을 동일한 수의 길이로, 짧은 숫자의 수는 0 이전에 구성됩니다. 그런 다음 가장 낮은 위치에서 시작하여 차례로 정렬합니다. 이것은 가장 낮은 위치에서 가장 높은 비트 분류까지 질서 정연한 시퀀스가됩니다.
(2) 예 :
(3) Java와 함께 실현하십시오
Java.util.arraylist import java.util.list; , 54,101,56,18,23,34,15,35,25,53,51} {a); {System.out.println (a [i]);}} 공개 void 정렬 (int [] 배열) {int max = array; <array.length; i ++) {if [i]> max {max = array [i];}} int time = 0; time ++;} // 10 개의 대기열을 만듭니다. Queue = newArrayList <ArrayList> (int i = 0; i <10; i ++) {arrayList <Infleger> queue1 = new Arr Aylist ins> (); queue.add (queue1);} // int i = 0; i <시간; i ++) {// 배열 요소; <배열; j ++; int) pow (10, i 10, i); queue.get (x); // 요소 카운터; = queue.get (k); queue3.get (0);위는이 기사의 모든 내용입니다.