정렬의 데이터 구조 제 7 장 소개

첫째, 개념

데이터 정렬 : 객체의 그룹을 분류하면, 재 배열 된 소정의 처리 순서에 자주 정렬 된 검색 서비스입니다.

안정 정렬 : 정렬 경우 동일한 원래 레코드들의 상대적인 순서를 유지 키워드 정렬이 메소드가 호출되어 안정된 정렬, 안정 특성과 상관없이 데이터의 자체 정렬 방법.

정렬 유형 :

  • 내부 시퀀싱 : 모든 데이터가 메모리에 저장됩니다;
  • 외부 종류 : 외부 메모리 액세스 주문 프로세스의 필요성

이 방법에있어서, 내부 정렬 포인트

  • 삽입 정렬
  • 정렬 교환
  • 선택 정렬
  • 병합 정렬

정렬 인덱스 (정렬 알고리즘 성능 분석) :

  • 저장 공간
  • 비교의 수

둘째, 삽입 정렬

삽입 정렬 방법을 사용할 직접 삽입 정렬 , 정렬 진 삽입 , 정렬 테이블 삽입쉘 종류 .

직접 삽입 정렬 (스트레이트 삽입 정렬)은 단순한 정렬 방법의 기본적인 아이디어는 차례로 각각의 레코드는 테이블의 하나의 행에 삽입 된 것으로되어 레코드 1의 새로운 증가 수를 구하므로 위해서 정렬 정렬 된 목록. 직접 삽입 정렬 프로세스에 비슷한 도서관은 책을 구성 할 수 있습니다.

// R & 소트 테이블이 LT n은 테이블의 길이 
공극 StraightlnsertSort (목록 R & LT, INT N) { 
     INT I, J] 
     에 대해 (I는 = 2 ; I <= N; I ++ ) { 
        R & LT [ 0 ] = R & LT [I]; // 센트리의 i 번째 복사 기록 
        J = I- . 1 ,
         그동안을 (R & LT [ 0 ] .KEY < R & LT [J]를 .KEY) {// 센트리 비교는 키 값까지 센트리 키 이하인 
            R & LT [J + . (1) = R & LT [J], j 번째의 J + 1 번째의 기록에 할당 // 레코드 
            J - ; 
        } 
        R & LT [j 개의 + . 1 ] R 및 LT = 0  ] // i 번째 시퀀스가 삽입되어 기록 에
    } 
}

그것은 않도록 R 기록 잃어버린 콘텐츠로 인해 이동하지 R [I]의 값을 저장하기 전에 기록 R [0]을 하나의 검색주기를 입력 개의 함수이다있다 [I]에서, 다른 내지 센트리 효과 "모니터링"배열 첨자 변수 J는 동안 루프 범위의 경계의 일단 (즉, J <1), R [0] 자동 제어 루프의 끝 따라서 필요성을 회피하면서, 각 사이클 동안 모니터 할 밖으로 J 여부 국경. 테스트 사이클 시간의 조건으로 약 절반으로 감소되도록이 기술의 적용.

알고리즘 분석 : 직접 삽입 정렬 알고리즘 시간 복잡도는 많은 수의 레코드를 정렬 할 경우 O (N2), 일반적으로 일종의 직접 삽입을 사용하지 않는 것입니다, 쉽게 쉽게 구현하기 위해, 이해하기 간단합니다. 도면의 공간 점에서, 즉 보조 공간의 기록을 요구 공간적 복잡도는 O (1)이다. 직접 삽입 정렬은 안정적이다.

● 저장 공간 N + 1]. (1) (1 추가 공간), 공간 복잡도 O
테이블을 위해 주어지면 O (N 2)의 ● 시간 복잡도는 O 최고의 시간 복잡성 (소트 N-)
● 안정성 : 안정 종류의;

셋째, 교환 정렬

교환 종류의 기본 개념 : 두 키의 기록 크기가 역순으로 나타나는 경우 기록 두 키 크기의 비교는 이러한 두 개의 레코드의 교환이 매우 작은 키 레코드 순서가 전방으로 이동되어, 키 기록 시퀀스의 뒤쪽으로 크게.

정렬 교환은 다음과 같습니다 : 일종의 거품과 빠른 정렬합니다.

1, 거품 종류 :

기본적인 아이디어 : 반복 비교를 통해, 정렬 스왑 인접한 기록을 달성, 각 여행의 효과는 마지막 레코드에 가장 큰 현재 키 변화입니다

알고리즘은, 정수 변수 endsort를 정의 할 때, 기록 트립 버블의 교환, 그것은 1로 설정하면, 각각의 정렬하기 전에, 먼저 그것은 0으로 설정된다. endsort 0의 값이 알고리즘을 종료 할 경우주기의 끝에서, 우리는 endsort 확인합니다.

// R & LT N 테이블은 테이블이 긴 소트 
무효화 거품 정렬 (R &리스트 LT, INT의 N)를 {
     / * endsort : 플래그 파일이 정렬되어 * / 
    위해 (I는 = 1. , I는 <= N- 1. ; I ++ ) { 
        endsort = 0 ; / * 싸이클이 과거에 기록되지 않은 경우, 순서 정렬 된 *은 / 
        위해 (J = 1. , J <= 니켈 - 1. , J ++ ) {
             IF (R & LT [J] .KEY> R & LT [J + . (1) ] .KEY) { 
                TEMP = R & LT [J] 
                R & LT [J] = R & LT [J + 1이다. ]; 
                R & LT [J + . 1= 온도; 
                endsort = 1 ; 
            } 
        } 
        경우 (endsort == 0 ) 휴식 ; 
    } 
}
  • 시간 복잡도 : O (N2) 상기 표 정렬 O (N) 인 경우
  • 공간 복잡도 : O (1)
  • 안정성 : 안정 일종.

2 퀵 (빠른 정렬)는 교환의 일종이다 정렬 본질적으로 기포의 개선, 먼저이 배치되도록,이 테이블 교환의 나머지 기록과 비교 될 제 레코드를 검색 기록의 정확한 최종 위치는, 기록 용지가 두 부분 중 하나로 분할된다 {덜 녹화 키를 초과하도록 (왼쪽), 다른 키 레코드 주홍 (오른쪽)의보다 더 컸다} 후 두 부분을 정렬 될 때까지 등등에 상기 프로세스를 재실행하고,

 

알고리즘 분석 :

  • ● 공간 : N + 2 로그 N (2 로그 n은 추가 공간 - 스택)
  • ● 시간 : O (nlog 2 n)를 참고 : 초기 주문 또는 실질적으로는 기록 테이블을 주문한 경우, 빠른 정렬 정렬 거품으로 변질 것, 시간 복잡도는 O (N 2)이다; 즉 : 빠른 정렬 테이블의 기본 자신의 플레이 효율에 가장 부정적인 효과를 주문할 때.
  • ● 안정성 : 불안정한 정렬

 넷째, 선택 정렬

선택 정렬 (선택 정렬)의 기본 개념은 : i 번째 기록 시퀀스를 순서대로마다에서 N-는 + 1 (ⅰ 1,2, ..., N-1 =) 최소 기록 키 기록 선택.

카테고리 : 직접 선택 종류 및 힙 종류

 1. 직접 선택 정렬

직접 선택 소팅 알고리즘은 기본적인 아이디어이다 NI 2 차 키를 비교하여 i 번째의 선택 조작 키는 기록 NI + 1의 최소 기록으로부터 선택되고, i 번째와 (1 ≦ I ≦되고 NL) 교환 기록합니다.

보이드 SelectSort (R &리스트 LT, INT N-) { 
     INT의 분은, I는, J가;
      // 주기마다 최소한의 키 값이 선택 
    을 위해 (I는 = 1. , I는 <= N- 1. ; I ++ ) {  = I] / / i 번째 작은 키 레코드 가정 
        대를 (ⅰ J + = . 1 ; J <= N- J ++ ) {
             IF (R & LT [J] .KEY < R & LT [분] .KEY) {  = J; // 레코드 버튼 작은 값 기록 첨자 
            } 
             IF (분! = I) { 
                스왑 (R & LT [분], R & LT [I]) // 최소 키 값과 상기 제 i 기록 스위칭 과거 기록 
            } 
        }
    } 
}

알고리즘 분석 :

  • ● 공간 : N + 1 (1 추가 공간입니다)
  • ● 시간 : O (N 2), 케이스는 큰 N에 적합하지 않다
  • ● 안정성 : 불안정한 정렬

2, 힙 정렬

건설 스택 (스크리닝 방법)
1) 방법 :
{... R 1, R 2 기록 세트 ., R, N}
입력 (12)을 순차적으로 완전한 바이너리 트리로 (배열 저장소)
(2) 경우, 마지막 하나의 상위부터 어린 아이들은 더 이상 체까지 왼쪽 그 방향으로 또는 오른쪽 화면 아래 작은 아이들이다,
(3) 연속 된 각 부모를 처리.

힙 정렬을위한 N, 기록 순서에 필요한 평균 시간은 O (nlog2n)이다. 최악의 경우, 그것의 시간 복잡도는 O (nlog2n)에 있습니다. 빠른 종류의 상대,이 힙 종류의 가장 큰 장점이다. 또한, 힙 보조 기억과의 교류에 대한 일종의 만 기록 크기입니다. 힙 정렬 불안정합니다.

다섯째, 병합 정렬 

병합 정렬 (병합 정렬) 열이 정렬 된 서브 - 시퀀스의 개수에 따라 정렬 될 필요가 있다는 것을 제외하고, 다른 종류의 클래스 분류 방법을 선택, 교환 정렬, 정렬 삽입된다. 의미는 두 개 이상의 테이블이 새로운 정렬 된 목록으로 병합 정렬 된 병합하는 것입니다. 기록 시퀀스를 비교 첫 번째 키 값의 결합 방법은, 최소 하나의 정렬 순서에서 첫번째 키 레코드이다. 레코드 키 비교가 첫 번째 레코드에 앞서 각 시퀀스를 계속 제거, 두 번째 레코드는 행 해안을 식별 할 수 있습니다. 그래서 궁극적으로 계급에 이동합니다. 그래서 일종의 합병의 기초의 병합합니다.

카테고리 :

 

  • 결합 정렬 순서
  • 방법 병합 정렬

 정렬 알고리즘 병합 시간 복잡도는 O (nlog2n)의 사용으로 인해 배제하고 결과 어레이 B를 저장하는 레코드의 수가 될 오버 헤드 회 추가 저장 용량을 필요로 이루어진다 정렬 병합. 방법 병합 정렬 안정적이다. N 큰 경우, 성능은 일종의 더 나은 병합 정렬 시간 힙에 비해을하지만, 보조 기억의 그 많은 양이 필요합니다. O (N)

 

 

추천

출처www.cnblogs.com/jalja365/p/12616537.html