-3

这是我的实现,我有一个 txt 文件,其中动物是随机分配的。我想订购它们并将其插入列表中。

void SortedList::insert(std::string x){

    int insertPoint=0;

    if(top==n){
    n = 2 * n;
    string* temp = arr;
    arr = new string[n];

    for (int i = 0; i < top; i++){
            arr[i] = temp[i];
            }

        delete[] temp;
    }


    arr[top]=x;
    LinearOrdering();
    top++;

}

void SortedList::LinearOrdering(){

    for(int i=0; i < top ; i++){

    if (arr[i] > arr[ i + 1]) {
            swap (arr[i], arr[i+1]);
        }

    }

}

这是我的结果

aardvark
baboon
cougar
gorilla
lion
mouse
ocelot
gerbil
orangutan
hamster
panther
elephant
rat
rhinoceros
tiger
hippopotamus
zebra

我的代码有什么问题使它部分排序。

4

3 回答 3

1

看起来您正在尝试对列表进行冒泡排序。您必须循环多次才能使其工作。

此答案假设您这样做是出于教育目的。否则,正如 StilesCrisis 建议的那样,使用std::sort()and 你可能更喜欢std::vector<std::string>而不是string*.

于 2013-05-21T07:09:22.977 回答
0

问题在于您的线性排序功能

oid SortedList::LinearOrdering(){

for(int i=0; i < top ; i++){

if (arr[i] > arr[top]) {
        swap (arr[i], arr[top]);
        break; 

    }

}

}

于 2013-05-21T07:13:19.853 回答
0

LinearOrdering 不对数据进行排序,它只是交换一些元素。

省点麻烦,调用std::sort。

于 2013-05-21T07:08:37.440 回答