insertion sort 예제

 

$7$$는 첫 번째 요소와 비교할 수 없는 다른 요소가 없기 때문에 그 위치에 남아 있습니다. 이제 $4$$$$를 향해 이동할 때, $$7$$는 정렬된 목록에서 가장 큰 요소이며 $4$$$$보다 큽합니다. 따라서 $$4$$를 올바른 위치로 이동하면 즉$ 7$$$가 발생하기 전에 이동합니다. 마찬가지로 $$5$$$, $7$$$$(정렬된 목록에서 가장 큰 요소)가 $5$$$보다 크므로, 우리는 $5$$$를 올바른 위치로 이동합니다. 마지막으로 $ 2 $ $ $$$의 왼쪽에있는 모든 요소는 $ 2 $ $ $ $ $ $$ (정렬 된 목록)의 왼쪽에있는 모든 요소가 모두 $ 2 $ $ $ $$$$보다 크고 $ 2 $$$$$가 첫 번째 위치에 배치되기 때문에 한 포지션앞으로 이동됩니다. 마지막으로 지정된 배열은 정렬된 배열을 생성합니다. 삽입 정렬이 효율적이지만 삽입 정렬 알고리즘에 이미 정렬된 배열을 제공하더라도 외부 for 루프를 계속 실행하므로 n 단계가 이미 정렬된 n 요소 배열을 정렬해야 하므로 최상의 경우 시간이 발생합니다. 복잡성 n. 사용의 선형 함수: 요소 수가 적을 때 삽입 정렬이 사용됩니다. 또한 입력 배열이 거의 정렬되고 완전한 큰 배열에 배치된 요소가 거의 없는 경우에도 유용할 수 있습니다. 아래에서는 버블 정렬이 지정된 배열을 정렬하는 방법에 대한 그림 표현을 가지고 있습니다. 가장 좋은 경우 입력은 이미 정렬된 배열입니다.

이 경우 삽입 정렬은 선형 실행 시간(즉, O(n))을 가합니다. 각 반복 동안 입력의 첫 번째 나머지 요소는 배열의 정렬된 하위 섹션의 오른쪽 요소와만 비교됩니다. 마찬가지로, 더 많은 새 카드가 제공되는 경우, 당신은 쉽게 같은 과정을 반복하고 새 카드를 삽입하고 너무 정렬 카드를 유지할 수 있습니다. 각 반복에서 정렬된 배열을 늘려 입력 요소를 반복합니다. 정렬된 배열에서 가장 큰 값과 현재 요소를 비교합니다. 현재 요소가 더 큰 경우 요소를 그 자리에 두고 정렬된 배열에서 올바른 위치를 찾은 다음 요소로 이동하여 해당 위치로 이동합니다. 이는 현재 요소보다 큰 모든 요소를 정렬된 배열에서 한 위치로 이동하여 수행됩니다. 인덱스 1(0이 아님)에서 시작하여 인덱스 1에서 시작하는 각 인덱스는 새 카드와 같아서 왼쪽에 정렬된 하위 배열에 올바른 위치에 배치해야 합니다.

삽입 정렬과 관련된 단계는 다음과 같습니다: 삽입 알고리즘은 시작(위치 2, C 배열 인덱스 =1)에서 하나의 요소를 선택합니다. 임시 변수에 저장됩니다. 그런 다음 왼쪽 요소와 하나씩 비교됩니다. 요소가 더 크면 선택한 요소가 오른쪽으로 이동됩니다. 이 이동하는 동안 구멍이 생성됩니다. 그런 다음 인덱스가 첫 번째 요소에 도달할 때까지 이 프로세스가 반복됩니다. 값이 선택한 요소보다 적을 때 요소는 이동되지 않습니다. 이 경우 구멍이 이동되지 않습니다.

이제 마지막으로 선택한 요소(임시 변수에서)가 구멍으로 이동됩니다. 이제이 요소는 적절한 위치에 도달했습니다. 이 후 다음 위치 또는 배열 인덱스 2가 선택됩니다. 그런 다음 동일한 프로세스를 반복합니다. 점차적으로 모든 왼쪽 요소가 이동되고 정렬됩니다. 이 전체 프로세스는 배열 위치 선택이 최대(개수-1)로 갈 때까지 반복됩니다. 마지막으로 전체 배열이 정렬되고 선택한 요소가 적절한 위치에 삽입됩니다. 가장 간단한 최악의 경우 입력은 역순으로 정렬된 배열입니다.