在 C# 中使用冒泡排序对整数进行排序,但想移动整个对象

Using BubbleSort in C# to sort Integers, But Want to Move Whole Object

我已经实现了一个简单的 BubbleSort 来根据任务的优先级对我的任务进行排序,它看起来像这样

int temp = 0;
for (int write = 0; write < taskStructure.TasksArray.Count; write++)
{
    for (int sort = 0; sort < taskStructure.TasksArray.Count - 1; sort++)
    {
        if (taskStructure.TasksArray[sort].taskPriority > taskStructure.TasksArray[sort + 1].taskPriority)
        {
            temp = taskStructure.TasksArray[sort + 1].taskPriority;
            taskStructure.TasksArray[sort + 1].taskPriority = taskStructure.TasksArray[sort].taskPriority;
            taskStructure.TasksArray[sort].taskPriority = temp;
        }
    }
}

这太棒了,它以正确的顺序对它们进行排序,但是,它实际上只交换该列中的整数,而不交换它链接到的对象(任务)。

例如:

我有两个任务

名称:TestName1 描述:TestDesc1 优先级:5
名称:TestName2 描述:TestDesc2 优先级:3

在我的冒泡排序之后:

名称:TestName1 描述:TestDesc1 优先级:3
名称:TestName2 描述:TestDesc2 优先级:5

但它需要做(移动实际对象):

名称:TestName2 描述:TestDesc2 优先级:3
名称:TestName1 描述:TestDesc1 优先级:5

希望这能让它更清楚,有什么方法可以移动优先级链接到的对象(任务)吗?

你只需像这样更改交换过程(最里面的代码块)并删除开头的 int temp = 0 行:

var temp = taskStructure.TasksArray[sort + 1];
taskStructure.TasksArray[sort + 1] = taskStructure.TasksArray[sort];
taskStructure.TasksArray[sort] = temp;

但是请注意,您也可以像这样使用 Array.Sort 方法:

Array.Sort(taskStructure.TasksArray, (x, y) => x.taskPriority - y.taskPriority);