在 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);
我已经实现了一个简单的 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);