我必须使用SRTN算法模拟进程调度器,并且在某个部分内部遇到问题。排序队列
我有一个名为'Process'的自定义类的队列,我需要根据名为'last_prediction'的字段对它进行排序。我的代码大部分时间都在工作,但是如果您查看我的output的时间:19,就绪队列中的输出错误(应为:1004(1.5)1002(2)1003(2))。
这里是我的代码:
int count = ReadyQueue.Count;
// Copy Queue into Vector
ArrayList temp = new ArrayList();
for (int i = 0; i < count; i++)
{
Process p = (Process)ReadyQueue.Dequeue();
temp.Add(p);
}
// Sort Vector
for (int i = 0; i < count; i++)
{
double min = ((Process)temp[i]).last_prediction;
for (int j=i+1; j<count; j++)
{
if (((Process)temp[j]).last_prediction < min)
{
min = ((Process)temp[j]).last_prediction;
Process dummy = (Process)temp[j];
temp[j] = temp[i];
temp[i] = dummy;
}
}
}
// Copy Vector back into Queue
for (int i = 0; i < count; i++)
{
Process p = (Process)temp[i];
ReadyQueue.Enqueue(p);
}
编辑:好吧,我尝试使用ICompare,类似于你所付出的hughdbrown.Now我得到一个不同的错误:
public class Process
{
public int process_id;
public int arrival_time;
public int total_time;
public int avg_burst;
public int actual_burst;
public int last_burst; // SRTN
public double last_prediction; // SRTN
public int io_delay;
public int context_switch_delay;
public class ProcessSort : IComparer
{
public int Compare(object x, object y)
{
var a = x as Process;
var b = y as Process;
double aNum = a.last_prediction;
double bNum = b.last_prediction;
return Compare(aNum, bNum);
}
}
}
这是错误我现在得到:
Unhandled Exception: System.InvalidOperationException: Failed to compare two elements in the array. ---> System.NullReferenceException: Object reference not set to an instance of an object.
它不会停止成为一个队列,一旦你排序吗?它只是成为另一个列表。 – 2010-10-16 03:17:04
A1(B1)A2(B2)A3(B3)您是否想根据B值对其进行排序,然后根据它们的A值对具有相同B值的那些进行排序? – blizpasta 2010-10-16 03:37:31
不完全。我需要它,所以进程停留在它的位置,如果它前面的值是等值的 – 2010-10-16 04:16:37