堆排序,Dijikstra算法和C#

本文介绍了作者如何用C#实现堆排序和Dijkstra最短路径算法,通过比较发现C#在密集计算上的表现甚至优于C++。堆排序在元素数量超过39个时优于冒泡排序,而Dijkstra算法的实现则相对简单。作者还通过计算圆周率验证了不同语言的执行效率,C#的运行时间最短。
摘要由CSDN通过智能技术生成

 昨天搞了个通宵,总算把一堆与排序和图的算法用代码给实现了,其中最难的是堆排序和 Dijkstra 最短路径算法。今天早上扬眉吐气,以前望而生畏的东西,现在终于可以信手拈来了。
 
数组排序,以前我用快速排序,不过性能不太稳定,而且一不小心堆栈溢出。堆排序虽然比快速排序平均性能差点,但极端情况下要好得多,性能稳定。
 
经过测试,我的堆排序算法指令耗费为 75.66 N*log2 N,比快速排序平均性能 42.36 N*Log2N 要稍慢些,不过比冒泡法 10.32*N^2 要快许多了。也就是说,只要超过 17 个元素,则快速排序已经好于起泡排序;只要超过 39 个元素,则堆排序要好于起泡排序。
 
至于 Dijkstra 算法,以前上课也讲过,不过好象当时很难听懂。其实没什么难的,估计是那个老师不善于语言表达的缘故。实现起来其实也就一会的工夫。
 
先晾一下代码:
堆排序:

  1.     public class HeapSortHeap {
  2.         public int count;
  3.         public int[] e;
  4.         public HeapSortHeap(int count){
  5.             this.count = count;
  6.             e = new int[count+1];
  7.         }
  8.         public void HeapMake(int count){     //自上向下生成一个堆
  9.             for (int i = count / 2; i > 0; i--) HeapAdjust(i, count);
  10.         }
  11.       //堆排序
  12.         private void HeapAdjust(int idx, int count){  //自上向下调整一个堆
  13.             for (int s = idx; s <= count / 2; ){
  14.                 int type = 0; int k = 0;
  15.                 if (e[s] < e[2 * s]) type |= 1;
  16.                 if (s < count / 2){
  17.                     
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值