《 C 알고리즘 》 독서 노트 8: shell sort
void insert_sort2(int *a, int l, int r)
{
int step = 0;
iter1:
for(int i = l + 1; i <= r; ++ i)
{
int j = i;
int v = a[i];
while(j >= l + 1 && LT(v, a[j - 1]))
{
a[j] = a[j - 1];
-- j;
++ step;
}
a[j] = v;
}
printf("insert sort step: %d
", step);
}
힐 정렬 의 개선 은 외부 순환 iter 1 밖에서 오프셋 h 를 추가 하 는 것 입 니 다. 매번 재 정렬 한 후에 다음 과 같은 성질 을 얻 을 수 있 습 니 다. h 마다 하 나 를 취하 여 이 새 배열 을 질서 있 게 합 니 다.순서대로 오프셋 을 줄 이 고 마지막 으로 오프셋 을 1 로 한다.앞에서 말 한 삽입 정렬 의 성질 때문에 매번 정렬 은 삽입 정렬 으로 완성 할 수 있다.중요 한 것 은 편 이 량 의 선택 방식 이다.무 작위 로 생 성 된 N = 10000 의 데 이 터 를 통계 한 결과 다음 과 같은 몇 가지 오프셋 이 비교적 좋 은 것 으로 나 타 났 다.(1):4095 2047 1023 511 255 127 63 31 15 7 3 1 hn=hn+1∗2+1 (2):3280 1093 364 121 40 13 4 1 hn=hn+1∗3+1
다음 방식 은 효과 가 좋 지 않다. (1): 4096 2048 1024 512 256 64 32 16 4 2 hn = hn + 1 * 8727
void shell_sort(int *a, int l, int r)
{
int h;
for(h = 1; h <= (r - l) / 4; h = 2 * h);
int step = 0;
for(; h; h /= 2)
{
printf("%d ", h);
for(int i = l + h; i <= r; ++ i)
{
int j = i;
int v = a[i];
while(j >= l + h && LT(v, a[j - h]))
{
a[j] = a[j - h];
j -= h;
++ step;
}
a[j] = v;
}
}
printf("
shell sort step %d
", step);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.