정렬 기본 사상 직접 삽입
2. 보초병 의 역할 알고리즘 에 도 입 된 추가 기록 R [0] 을 감시초 나 보초병 (Sentinel) 이 라 고 한다. 보초병 은 두 가지 역할 을 한다. ① 사람 이 찾기 (위치 삽입) 순환 하기 전에 R [i] 의 사본 을 저장 하여 기록 후 이동 으로 인해 R [i] 의 내용 을 잃 어 버 리 지 않도록 한다. ② 그 주요 역할 은 찾기 순환 에서 '감시' 하 표 변수 j 가 경 계 를 넘 었 는 지 여부 이다. 일단 경 계 를 넘 으 면 (즉 j = 0) R [0] 때문이다.. key 와 자신 을 비교 하면 순환 판정 조건 이 성립 되 지 않 아 검색 순환 이 끝나 고 이 순환 에서 매번 j 가 경 계 를 넘 었 는 지 확인 하 는 것 을 피 할 수 있 습 니 다 (즉, 순환 판정 조건 인 'j > = 1' 을 생략 합 니 다). 주의: ① 실제로 모든 경계 조건 을 간소화 하기 위해 도입 한 부가 결점 (요소) 은 보초병 이 라 고 할 수 있다. 【 예 】싱글 체인 시트 의 두 결점 은 사실상 보초병 ② 보초병 을 도입 한 후 순환 조건 을 찾 는 시간 을 절반 가량 줄 였 기 때문에 기록 수가 많은 파일 에 대한 절약 시간 이 상당 하 다. 정렬 과 같은 사용 빈도 가 매우 높 은 계산법 에 대해 서 는 운행 시간 을 최대한 줄 여야 한다. 따라서 상기 알고리즘 중의 보초병 을 볼 수 없다.작은 기술 을 위해 서 는 이러한 기 교 를 깊이 이해 하고 파악 해 야 합 니 다. 인 스 턴 스 를 입력 하 는 정렬 과정 을 지정 합 니 다. 정렬 을 기다 리 는 파일 은 8 개의 기록 이 있 습 니 다. 그 키 워드 는 각각 49, 38, 65, 97, 76, 13, 27, 49 입 니 다. 두 개의 똑 같은 키 워드 를 구별 하기 위해 49, 그 다음 49 의 아래 에 선 을 그 어 차 이 를 보 여 주 었 습 니 다. 그 정렬 과정 은 [애니메이션 시 뮬 레이 션] 알고리즘 분석 1. 산법 의 시간 성능 분석 을 볼 수 있 습 니 다. n 개의 기록 이 있 는 파일 에 대해 n - 1 번 정렬 을 해 야 합 니 다. 각종 상태 에서 의 시간 복잡 도: 9484 ° - - - 9516 ° - - 9516 ° - - 9516 ° - - 9516 ° - - - 9488 ° ☆ 초기 파일 상태 │ 정상 적 인 순서 │ 역순 ☆ 무질서 (평균) ☆ ├ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ┤ ☆ 제 i 의 열쇠 │ 1 │ i+1 │ (i-2)/2 ☆ ☆ 글자 비교 횟수 │ │ │ ☆ ├ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ┤ 전체 키워드 비교 횟수 │ n-1 │(n+2)(n-1)/2│ ≈n2/4 ☆ ├ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ┤ ☆ 첫 번 째 이동 횟수 기록 ☆ 0 │ i+2 │ (i-2)/2 ☆ ├ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ┤ 전체 이동 횟수 기록 │ 0 │(n-1)(n+4)/2│ ≈n2/4 ☆ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 시간 복잡 도 │ 0(n) │ O(n2) │ O(n2) ☆ └ -- -- -- -- ┴ -- -- ┴ -- -- -- ┴ -- -- -- -- ┘ 주의: 초기 파일 은 키워드 에 따라 질서 가 있 고 '정렬' 이 라 고 약칭 합 니 다. 초기 파일 은 키워드 에 따라 순차 적 으로 줄 이 고 '역순' 이 라 고 부 릅 니 다. 2. 알고리즘 의 공간 복잡 도 분석 알고리즘 에 필요 한 보조 공간 은 감시초 소 입 니 다. 보조 공간 복잡 도 S (n) = O (1) 입 니 다. 현지 정렬 입 니 다. 3. 정렬 안정성 을 직접 삽입 합 니 다. 정렬 을 직접 삽입 하 는 것 은 안정 적 인 정렬 방법 이다.
자신 이 쓴 간단 한 정렬 코드 삽입:
#include<stdio.h>
void main(){
int a[10];//={9,8,7,6,5,4,3,2,1,0}
int i,j,k,temp;
printf("please input 10 num(n<100):
");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++){
temp=a[i];
for(j=0;j<i;j++){
if(temp<a[j]){
for(k=i-1;k>=j;k--){
a[k+1]=a[k];
}
a[j]=temp;
break;
}
}
}
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("
");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.