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 }