C\#정렬 알고리즘 의 빠 른 정렬

1578 단어 빠 른 정렬
빠 른 정렬 실현:
 
namespace QuickSort
{
class QuickSort
{
public static void Sort(int[] array)
{
DoSort(array,0, array.Length-1);
}
private static void DoSort( int[] array, int start, int end)
{
if( start < end)
{
int temp = Partition(array, start, end);
DoSort(array, start, temp-1);
DoSort(array, temp + 1, end);
}
}
private static int Partition(int[] array,int start, int end)
{
int index = start - 1;
for( var i=start; i< end; i++)
{
if( array[i] < array[end])
{
index++;
Swap(array, index, i);
}
}
Swap(array, index +1, end);
return index + 1;
}
private static void Swap(int[] array, int index1, int index2)
{
var temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
}
}
이상 은 빠 른 정렬 을 위 한 코드 입 니 다.여기 에는 두 가지 중요 한 방법 이 있 습 니 다.1.Partition:이 방법 은 배열 의 특정한 요 소 를 참고 요소(축 요소 나 주요 요소)로 하고 배열 을 세 개의 구역 으로 나 누 는 것 입 니 다.[<=참고 요소][>=참고 요소]2.DoSort:이 방법 은 Partition 을 호출 하여 배열 을 구분 합 니 다.그리고 새로 생 긴 하위 배열 에서 재 귀적 호출 은 최종 적 으로 질서 있 는 목적 을 달성 합 니 다.위 에서 제시 한 코드 는 배열 의 마지막 요 소 를 참고 요소 로 하 는데 이것 은 참고 요소 가 선택 한 방식 중 하나 일 뿐이다.우 리 는 또한 즉시 배열 의 요소 나 배열 중간 요 소 를 참고 요소 로 선택 할 수 있다.사실 참고 요소 의 선택 은 빠 른 정렬 성능 에 큰 영향 을 미친다.매번 선택 한 참고 요소 가 배열 을 상대 적 으로 균형 잡 힌 구역 으로 나 눌 수 있다 면 빠 른 정렬 은 가장 빠 른 정렬 알고리즘 이 될 것 입 니 다.그러나 또 다른 극단 적 인 상황 에서 매번 나 누 어 지 는 배열 은 1 과 n-1 의 관계 이 고 빠 른 정렬 은 느 려 집 니 다.구체 적 인 성능 데이터 뒤에 다시 연 구 를 토론 하 자.

좋은 웹페이지 즐겨찾기