前言
堆排序是一种高效的排序算法,基于二叉堆数据结构实现。它具有稳定性、时间复杂度为O(nlogn)和空间复杂度为O(1)的特点。
堆排序实现原服务器托管网理
- 构建最大堆:将待排序数组构建成一个最大堆,即满足父节点大于等于子节点的特性。
- 将堆顶元素与最后一个元素交换:将最大堆的堆顶元素与堆中的最后一个元素交换位置,将最大元素放到了数组的末尾。
- 重新调整堆:对剩余的n-1个元素进行堆调整,即将堆顶元素下沉,重新形成最大堆。
- 重复步骤2和3,直到堆中的所有元素都被排列好。
堆排序代码实现
publicstaticvoidHeapSort(int[]array)
{
intarrayLength=array.Length;
//构建最大堆
for(inti=arrayLength/2-1;i>=0;i--)
Heapify(array,arrayLength,i);
//依次取出堆顶元素,并重新调整堆
for(inti=arrayLength-1;i>=0;i--)
{
//将堆顶元素与当前最后一个元素交换
inttemp=array[0];
array[0]=array[i];
array[i]=temp;
//重新调整堆
Heapify(array,i,0);
}
}
privatestaticvoidHeapify(int[]arr,intn,inti)
{
intlargest=i;//假设父节点最大
intleft=2*i+1;//左子节点
intright=2*i+2;//右子节点
//如果左子节点大于父节点,则更新最大值
if(leftarr[largest])
largest=left;
//如果右子节点大于父节点和左子节点,则更新最大值
if(rightarr[largest])
largest=right;
//如果最大值不是当前父节点,则交换父节点和最大值,并继续向下调整堆
if(largest!=i)
{
intswap=arr[i];
arr[i]=arr[largest];
arr[largest]=swap;
Heapify(arr,n,largest);
}
}
publicstaticvoidHeapSortRun()
{
int[]array={19,27,46,48,50,2,4,44,47,36,38,15,26,5,3,99,888,0,-1};
Console.WriteLine("排序前数组:"+string.Join(",",array));
HeapSort(array);
Console.WriteLine("排序后数组:"+string.Join(",",array));
}
运行结果
总结
堆排序是一种高效的排序算法,通过构建最大堆和反复调整堆的操作,实现对数组的排序。其时间复杂度为O(nlogn),并且具有较好的稳定性和空间效率。但是由于其涉及大量的元素交换操作,所以在实际应用中,可能不如快速排序等算法效率高。
服务器托管,北京服务器托管,服务器租用 http://www服务器托管网.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 阿里云微服务引擎负责人李艳林:云原生网关当道,会带来哪些改变
作者:褚杏娟 前言: 云几乎给每项基础设施都带来了冲击,网关也不例外。近期,云原生网关概念也越来越被大家热议。那么,究竟云原生网关需要具备哪些特点?主流网关产品如何适应云原生?网关标准统一是否必要?云原生网关未来如何发展? 此前,Higress 发起人、阿里云…