您的位置:首页 > 其它

堆排序

2017-10-22 15:03 253 查看
堆排序:



class Program
{
static void Main(string[] args)
{
int[] nums = { 1, 4, 8, 0, 3, 6, 9, 2 };
HeapSort(nums);
for (int i = 0; i < nums.Length; i++)
{
Console.Write(nums[i] + " ");
}
Console.ReadKey();
}

static void HeapSort(int[] nums)
{
//  构造成大顶堆
for (int i = nums.Length / 2; i >= 1; i--)
{
AdjustArray(nums, i, nums.Length);
}

//  进行排序
for (int i = nums.Length; i > 1; i--)
{
int temp1 = nums[0];
nums[0] = nums[i - 1];
nums[i - 1] = temp1;

AdjustArray(nums, 1, i - 1);
}
}

static void AdjustArray(int[] nums, int NumberToAdjust, int maxNumber)
{
int maxNumberIndex = NumberToAdjust;
int tempI = NumberToAdjust;
while (true)
{
int leftNumberIndex = 2 * tempI;
int rightNumberIndex = 2 * tempI + 1;

if (leftNumberIndex <= maxNumber && nums[leftNumberIndex - 1] > nums[maxNumberIndex - 1])
{
maxNumberIndex = leftNumberIndex;
}
if (rightNumberIndex <= maxNumber && nums[rightNumberIndex - 1] > nums[maxNumberIndex - 1])
{
maxNumberIndex = rightNumberIndex;
}

if (maxNumberIndex != tempI)
{
int temp = nums[maxNumberIndex - 1];
nums[maxNumberIndex - 1] = nums[tempI - 1];
nums[tempI - 1] = temp;
tempI = maxNumberIndex;
}
else
{
break;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: