所以我正在尝试对列表进行排序。在每个子列表内部,元素是包含运行时的类。这是我用来对列表进行排序的整数变量。
但是,如果最小的运行时位于列表的末尾,则列表不会100%排序。我在终端输出下面附了一张图像用于可视化。
以下是代码:
void sort( list<list<MetaData> > &omegaList )
{
// variables
list<list<MetaData> >::iterator cursor = omegaList.begin();
list<list<MetaData> >::iterator ptr = omegaList.begin();
list<list<MetaData> >::iterator end = omegaList.end();
// start the bubble sort...
for(; cursor != end; cursor++)
{
// iterate through the list
for(; ptr != end; ptr++)
{
// compare runtimes of different lists
if( ptr->front().getProcessRunTime() < cursor->front().getProcessRunTime() )
{
// swap locations of lists in omegaList
swap( *ptr, *cursor );
// reset
cursor = ptr = omegaList.begin();
}
}
}
}
输出: SetExpressCheckout_API_Operation
如果有人可以向我解释为什么它不会看最后一个元素然后告诉我如何修复它我会很感激。
答案 0 :(得分:5)
进行排序的正确方法是使用std::list::sort
,如下所示:
cursor = ptr = omegaList.begin();
您可以看到运行here。
在冒泡排序中,第一个元素未被排序的原因是,只要找到无序元素,就可以执行此操作...
ptr++
...然后for
begin() + 1
- 循环操作启动,因此您的排序将在cursor = ptr = omegaList.begin();
重新启动。 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int main() {
int i = 0; // Loop counter iterates numRolls times
int numRolls = 0; // User defined number of rolls
int timesRolled[] = { 0 };
int pointerVal = 0;
int rollNumber = 0;
int die1 = 0; // Dice values
int die2 = 0; // Dice values
int rollTotal = 0; // Sum of dice values
printf("Enter number of rolls: ");
scanf_s("%d", &numRolls);
srand(time(0));
if (numRolls >= 1) {
// Roll dice numRoll times
for (i = 0; i < numRolls; ++i) {
die1 = rand() % 6 + 1;
die2 = rand() % 6 + 1;
rollTotal = die1 + die2;
++timesRolled[(rollTotal)];
printf("\nRoll %d is %d (%d+%d)",(i + 1), rollTotal, die1, die2);
}
printf("\n\nDice roll statistics: \n");
for (pointerVal = 1; pointerVal <= 12; ++pointerVal) {
printf("%ds: %d\n", pointerVal, timesRolled[(pointerVal)]);
}
}
else {
printf("Invalid rolls. Try again.\n");
}
_getch();
return 0;
}
非常狂野 - 我见过的第一个O(n ^ 3)排序实现。