选择排序 char 和 int

selection sort char and int

我有一个 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;
     }

问题在这里:

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

有效。