C# 힐 정렬
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class ShellSorter { public static int[] Sort(int[] a) { ShellSort(a); return a; } public static void ShellSort(int[] myArray) { int i, j, increment; int temp; for (increment = myArray.Length / 2; increment > 0; increment /= 2) { for (i = increment; i < myArray.Length; i++) { temp = myArray[i]; for (j = i; j >= increment; j -= increment) { if (temp < myArray[j - increment]) myArray[j] = myArray[j - increment]; else break; } myArray[j] = temp; } } } } }
힐 정렬은 정렬된 전체 시퀀스를 여러 개의 하위 시퀀스로 나누고 하위 시퀀스에 대해 직접 삽입 정렬을 수행하는 것입니다. 그런 다음 기본적으로 순서대로 모든 배열에 대해 직접 삽입 정렬을 수행합니다. 이는 새로운 순서의 시퀀스를 형성하는 데 사용됩니다. 일반적인 분할 방법은 두 요소 사이의 거리가 d=n/2, n/4, n/8...등이 되는 것입니다.
1. 기본 아이디어:
정렬할 전체 데이터 요소를 여러 그룹으로 나누고, 동일한 그룹의 데이터 요소를 직접 삽입하는 방법을 사용하여 그룹 수를 점차적으로 줄입니다. 데이터 요소가 완료되었습니다. 그룹 내에서 정렬한 후 정렬 프로세스가 종료됩니다.
2. 스킬 :
그룹의 구성은 단순히 "세그먼트별 분할"이 아닌, 일정 증분 dk로 분리된 레코드를 그룹으로 구성하고, 증분 dk를 단계적으로 단축한다. 예를 들어 dk=1이 될 때까지 차례로 5를 취합니다. 3,1).
3. 장점:
키워드 값이 작은 요소를 빠르게 앞으로 이동할 수 있고 순서가 기본적으로 순서대로 되어 있으면 직접 삽입 정렬을 사용할 수 있으며 시간 효율성이 훨씬 높아집니다. .
예시 1:
예시 2:
흐름도
삽입 정렬 알고리즘의 경우 원본 데이터가 순서대로 되어 있으면 데이터를 이동할 필요가 없으며 삽입의 효율성이 높아집니다. 정렬 알고리즘 주로 데이터 이동에 사용됩니다. 따라서 데이터 자체를 정렬하거나 기본적으로 정렬하면 효율성이 좋아진다고 볼 수 있다.
위 내용은 C#과 Hill 정렬 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!