K요소 찾기

Q: 원소 집합에서 k번째 작은 원소를 찾습니다. 즉, 찾은 원소가 정렬된 집합에서 K번째 위치에 있습니다.
Sol: 빠른 정렬의 탄젠트 함수를 사용하여 K번째 요소를 반복적으로 찾을 수 있습니다.
구체적인 단계:
1, 원소 집합 중 중추원 선택
2, 중추원이 원소 집합에서의 위치를 확정한다(빠른 정렬에서의 절분 함수를 이용한다)
3. 중추원이 원소가 집중된 위치와 K의 관계를 확정하고 분리된 하위 집합에서 K원소를 계속 찾는다. 구체적인 관계 코드는 비교적 자세하게 말한다.
일반 버전의 구분 함수는 원리 코드가 명확하게 말한다.
int partition(int arr[],int left,int right,int pivotIndex)
{
    int i,j,pivot,temp;
    i = left;
    j = right;
    pivot = arr[pivotIndex];
    /*swap arr[pivotIndex] and arr[right]*/
    temp = arr[pivotIndex];
    arr[pivotIndex] = arr[right];
    arr[right] = temp;
    /*init j*/
    j = left;
    /*shift all elements smaller than pivot to the left end*/
    for(i=left;i
탄젠트 함수를 사용하여 K 요소를 찾습니다.
4
int selectKth(int arr[],int left,int right,int K)
{
    int idx = partition(arr,left,right,left);
    if(left+K-1 == idx) return idx;
    if(left+K-1 < idx)
        return selectKth(arr,left,idx-1,K);
    if(left+K-1 > idx)
        return selectKth(arr,idx+1,right,K-(idx-left+1));
}
BTW, 일반 버전의 절분 함수를 이용하여 얻을 수 있는 빠른 정렬 알고리즘 버전:
void quickSort(int arr[],int left,int right)
{
    
    if (left < right)
    {   
        int idx = partition(arr,left,right,left);
        quickSort(arr,left,idx-1);
        quickSort(arr,idx+1,right);
    }
}

좋은 웹페이지 즐겨찾기