使用迭代器排序列表不会对最后一个元素C ++进行排序

时间:2015-10-28 03:06:13

标签: c++ list sorting stl iterator

所以我正在尝试对列表进行排序。在每个子列表内部,元素是包含运行时的类。这是我用来对列表进行排序的整数变量。

但是,如果最小的运行时位于列表的末尾,则列表不会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

如果有人可以向我解释为什么它不会看最后一个元素然后告诉我如何修复它我会很感激。

1 个答案:

答案 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)排序实现。