수색…


비고

정렬 알고리즘의 성능을 분석 할 때 주로 비교 및 ​​교환 횟수에 관심이 있습니다.

평균 거래

E n 을 N 개의 원소의 배열을 정렬하기위한 전체 평균 교환 횟수 라하자. E 1 = 0 (우리는 하나의 원소로 배열을 교환 할 필요가 없다). N 개의 요소 배열을 정렬하기위한 교환 평균 수는 N-1 요소 배열에 마지막 요소를 삽입하기 위해 평균 교환을 사용하여 N-1 요소 배열을 정렬하는 평균 교환 수의 합입니다.

여기에 이미지 설명을 입력하십시오.

합계 단순화 (산술 시리즈)

여기에 이미지 설명을 입력하십시오.

용어 확장

여기에 이미지 설명을 입력하십시오.

합계를 다시 단순화 (산술 시리즈)

여기에 이미지 설명을 입력하십시오.

평균 비교

C n 을 N 요소 배열을 정렬하기위한 총 비교 평균 수로 보자. C 1 = 0 (요소 배열 하나에 비교할 필요 없음). N 개의 요소 배열을 정렬하는 평균 비교 수는 N-1 개의 요소 배열에 마지막 요소를 삽입하기 위해 평균 비교를 사용하여 N-1 개의 요소 배열을 정렬하는 평균 비교 수의 합입니다. 마지막 요소가 가장 큰 요소 인 경우 하나의 비교 만 필요합니다. 마지막 요소가 두 번째로 작은 요소이면 N-1 비교가 필요합니다. 그러나 마지막 요소가 가장 작은 요소 인 경우 N 비교가 필요하지 않습니다. 우리는 여전히 N-1 비교 만 필요합니다. 그래서 아래 방정식에서 1 / N을 제거하는 것입니다.

여기에 이미지 설명을 입력하십시오.

합계 단순화 (산술 시리즈)

여기에 이미지 설명을 입력하십시오.

용어 확장

여기에 이미지 설명을 입력하십시오.

합계를 다시 단순화하십시오 (산술 시리즈 및 고조파 번호)

여기에 이미지 설명을 입력하십시오.

알고리즘 기초

삽입 정렬은 매우 간단하고 안정적인 장소 정렬 알고리즘입니다. 작은 시퀀스에서는 잘 수행되지만 큰 목록에서는 효율성이 떨어집니다. 모든 단계에서 알고리즘은 주어진 시퀀스의 i 번째 요소를 고려하여 올바른 위치에 올 때까지 왼쪽으로 이동합니다.

그래픽 일러스트레이션

삽입 정렬

의사 코드

for j = 1 to length(A)
    n = A[j]
    i = j - 1
    while j > 0 and A[i] > n
        A[i + 1] = A[i]
        i = i - 1
    A[i + 1] = n

다음 정수 목록을 고려하십시오.

[5, 2, 4, 6, 1, 3]

알고리즘은 다음 단계를 수행합니다.

  1. [5, 2, 4, 6, 1, 3]
  2. [2, 5, 4, 6, 1, 3]
  3. [2, 4, 5, 6, 1, 3]
  4. [2, 4, 5, 6, 1, 3]
  5. [1, 2, 4, 5, 6, 3]
  6. [1, 2, 3, 4, 5, 6]

C # 구현

public class InsertionSort
{
    public static void SortInsertion(int[] input, int n)
    {
        for (int i = 0; i < n; i++)
        {
            int x = input[i];
            int j = i - 1;
            while (j >= 0 && input[j] > x)
            {
                input[j + 1] = input[j];
                j = j - 1;
            }
            input[j + 1] = x;
        }
    }

    public static int[] Main(int[] input)
    {
        SortInsertion(input, input.Length);
        return input;
    }
}

보조 공간 : O(1)
시간 복잡성 : O(n)

하스켈 구현

insertSort :: Ord a => [a] -> [a]
insertSort [] = []
insertSort (x:xs) = insert x (insertSort xs)

insert :: Ord a => a-> [a] -> [a]
insert n [] = [n]
insert n (x:xs) | n <= x    = (n:x:xs)
                | otherwise = x:insert n xs


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow