选择排序char和int

时间:2016-06-02 09:22:13

标签: c++ arrays sorting selection

我有一个char和int数组:{6,A,n,D,5,1,j,e,F}。 我需要通过选择对此进行排序以实现此结果:{e,j,n,6,1,5,A,D,F}。

一开始,我想检查选择排序是否正常,但是 有一些问题。 我将char转换为int(还有另一个解决方案在一个数组中显示整数和字符?)所以我有一个整数数组:6,65,110,68,5,1,106,101,70。 但我的排序给了我这样的效果:5,6,65,68,68,68,68,110。

    void selection_sort(int tab1[], int size) {
        int index;
        for(int i = 0; i < size-1; i++)
        {
            index = i;
            for(int j = i + 1; j < size; j++)
            {
                if(tab1[j] < tab1[index])
                {
                    index = j;
                    swap(tab1[j], tab1[i]);

                }

            }
            cout << " " << tab1[index];
        } 
}

    int main() {
        const int size = 9;
        int tab[size] = {6, 'A', 'n', 'D', 5, 1, 'j', 'e', 'F'};
        cout << "Before sort: " << endl << endl;

        for(int i = 0; i < size; i++)
        {
            cout << " " << tab[i];
        }
        cout << endl << endl;

        cout << "After sort: " << endl << endl;
        selection_sort(tab,size);


        return 0;
     }

1 个答案:

答案 0 :(得分:1)

问题在于:

if(tab1[j] < tab1[index])
    {
     index = j;
     swap(tab1[j], tab1[i]);
    }

尝试:

for(int j = i + 1; j < size; j++)
   {
    if(tab1[j] < tab1[index])
        {
         index = j;      
        }
   }
swap(tab1[index], tab1[i]);

你要交换第二个循环中找到的最小元素,但是你要交换第二个循环中的每个迭代。这就是你得到错误价值的原因。

<强>更新

还有一个错误:

cout << " " << tab1[index];

应该是:

 cout << " " << tab1[i];

您可以在此处使用我建议的更改来尝试代码:http://code.geeksforgeeks.org/tjiwnu

有效。