zoukankan      html  css  js  c++  java
  • 电梯调度算法(C#实现)

    View Code
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 
      6 namespace ConsoleApplication1
      7 {
      8     class SCAN
      9     {
     10 
     11         static void Main(string[] args)
     12         {
     13             SCAN s = new SCAN();
     14 
     15             int[] a = { 55, 58, 39, 18, 90, 160, 150, 38, 184 };
     16             int nowway = 100;
     17 
     18 
     19             int[] high = s.high(nowway, a);//高磁道
     20             int hl = high.Length;
     21 
     22 
     23 
     24             int[] low = s.low(nowway, a);//低磁道
     25             int ll = low.Length;
     26 
     27 
     28             int[] all = new int[hl + ll];
     29             for (int i = 0; i < hl; i++)
     30             {
     31                 all[i] = high[i];
     32 
     33             }
     34             for (int i = 0, j = 0; i < ll; i++, j++)
     35             {
     36                 all[hl + i] = low[j];
     37             }
     38 
     39 
     40             int[] movelength = new int[all.Length];
     41             for (int i = 0; i < all.Length; i++)
     42             {
     43                 Console.WriteLine(all[i] + "      ");
     44                 int move = 0;
     45                 if (i == 0)
     46                 {
     47                     move = all[0] - 100;
     48                     movelength[i] = move;
     49                     Console.WriteLine("移动磁道数 " + move);
     50                     continue;
     51 
     52                 }
     53                 if (all[i] > all[i - 1])
     54                 {
     55                     move = all[i] - all[i - 1];
     56                     movelength[i] = move;
     57 
     58                 }
     59                 else
     60                 {
     61                     move = all[i - 1] - all[i];
     62                     movelength[i] = move;
     63                 }
     64 
     65                 Console.WriteLine("移动磁道数 " + move);
     66 
     67 
     68             }
     69 
     70             int summovelentgth = 0;
     71             for (int i = 0; i < movelength.Length; i++)
     72             {
     73                 summovelentgth += movelength[i];
     74 
     75 
     76             }
     77             Console.WriteLine("平均寻道长度:" + (double)summovelentgth / movelength.Length);
     78 
     79 
     80 
     81 
     82         }
     83 
     84         
     85         public int[] low(int nowway, int[] a)
     86         {
     87             int mincount = 0;
     88             for (int i = 0; i < a.Length; i++)
     89             {
     90                 if (a[i] < nowway)
     91                 {
     92                     mincount++; //小于磁道数的
     93                 }
     94             }
     95 
     96             int[] a1 = new int[mincount];
     97             int j = 0;
     98 
     99             for (int i = 0; i < a.Length; i++)
    100             {
    101                 if (a[i] < nowway)
    102                 {
    103 
    104                     a1[j] = a[i]; //小于磁道数的
    105                     j++;
    106                 }
    107             }
    108 
    109             Array.Sort(a1);//对小磁道升序排列
    110             int k = a1.Length;
    111             int[] a3 = new int[k];
    112             k--;
    113             for (int i = 0; i < a1.Length; i++, k--)
    114             {   //降序排列
    115                 a3[i] = a1[k];
    116 
    117             }
    118 
    119 
    120             return a3;
    121         }
    122         public int[] high(int nowway, int[] a)
    123         {
    124 
    125             int maxcount = 0;
    126 
    127             for (int i = 0; i < a.Length; i++)
    128             {
    129                 if (a[i] > nowway)
    130                 {
    131 
    132                     maxcount++; //大于磁道数的
    133                 }
    134             }
    135 
    136             int[] a2 = new int[maxcount];
    137             int j = 0;
    138             int m = 0;
    139             for (int i = 0; i < a.Length; i++)
    140             {
    141                 if (a[i] > nowway)
    142                 {
    143 
    144                     a2[m] = a[i]; //大于磁道数的
    145                     m++;
    146                 }
    147             }
    148 
    149             Array.Sort(a2);//对大磁道升序排列
    150             return a2;
    151         }
    152 
    153 
    154 
    155 
    156 
    157     }
    158 
    159 
    160 
    161 }
  • 相关阅读:
    2015第14周四
    2015第14周三
    2015第14周二
    2015第14周一
    2015第13周日
    2015第13周六
    2015第13周五
    2015第13周四
    2015第13周三
    2015第13周二
  • 原文地址:https://www.cnblogs.com/xinshijie/p/2610686.html
Copyright © 2011-2022 走看看