무질서 한 배열 에서 최소 M 개의 요 소 를 가 져 옵 니 다.
14627 단어 배열
정렬 알고리즘 을 쌓 으 려 면 제 다른 글 을 보 세 요.http://www.cnblogs.com/mingmingruyuedlut/archive/2011/09/13/2175308.html
구체 적 인 코드 는 다음 과 같다.
/// <summary>
/// N(count)
/// </summary>
/// <param name="array"> </param>
/// <param name="count"> count </param>
private static void GetSmallerNumbers(int[] array, int count)
{
BuildMinHeap(array); //
for (int i = array.Length - 1; i >= array.Length - count; i--) //
{
Console.WriteLine(array[0]); // ( : )
Swap(ref array[0], ref array[i]); //
MinHeapify(array, 0, i); //
}
}
/// <summary>
///
/// </summary>
/// <param name="array"> </param>
private static void BuildMinHeap(int[] array)
{
// : 0 ~ array.Length / 2 - 1 ,
for (int i = array.Length / 2 - 1; i >= 0; i--)
{
MinHeapify(array, i, array.Length); //
}
}
/// <summary>
/// :
/// </summary>
/// <param name="array"> </param>
/// <param name="currentIndex"> </param>
/// <param name="heapSize"> ( : )</param>
private static void MinHeapify(int[] array, int currentIndex, int heapSize)
{
int leftChildIndex = currentIndex * 2 + 1; //
int rightChildIndex = currentIndex * 2 + 2; //
int smallestIndex = currentIndex; // ( 、 、 )
if (leftChildIndex < heapSize && array[leftChildIndex] < array[smallestIndex])
{
smallestIndex = leftChildIndex;
}
if (rightChildIndex < heapSize && array[rightChildIndex] < array[smallestIndex])
{
smallestIndex = rightChildIndex;
}
if (smallestIndex != currentIndex) //
{
Swap(ref array[currentIndex], ref array[smallestIndex]);
MinHeapify(array, smallestIndex, array.Length); //
}
}
/// <summary>
///
/// </summary>
/// <param name="a"> a</param>
/// <param name="b"> b</param>
private static void Swap(ref int a, ref int b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
。。。。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PHP 배열에서 요소의 값이 최대 값인 키 이름을 가져옵니다.Qiita 에 " "@ PHP 매뉴얼 데이터 최대값이 나타나는 순서대로 획득 결과 키를 정렬한 후 가져오기 결과 @ paiza.IO PHP v5.6.40, v7.1.33, v7.4.4 " "@ StackOverflo...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.