【问题标题】:selection sort char and int选择排序 char 和 int
【发布时间】:2016-06-02 20:08:50
【问题描述】:

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

【问题讨论】:

  • I have an array of char and int: 不。
  • char 就像一个整数(更少字节)...每个符号在内存中都是一个数字...检查一下:chip.de/ii/1/2/5/4/9/5/8/0/ascii-93c823e7009f26b0.png这是符号表(ascii)的数字...您可以像整数一样使用字符进行计算,也可以进行 操作
  • 只是为了好玩,我做了你的陈述实际上所说的:一个 char 和 int 数组(我做了(一个不安全的)联合)。并先用小写字母排序,然后是数字,然后是大写字母。你可以在这里看到它:ideone.com/J30zY8
  • @bolov 谢谢,但您在 c++ 和面向对象编程中使用了特殊功能。我需要用基本知识来写这篇文章,以了解它是如何正常工作的。不过谢谢

标签: c++ arrays sorting selection


【解决方案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

有效。

【讨论】:

  • 它也不能正常工作。它显示:6,65,110,68,68,110,106,106。但我的代码适用于某种字符串。但对于数字不是。你有什么想法吗?
  • @gryzek 发布你的交换函数
  • @gryzek 这是代码:code.geeksforgeeks.org/tjiwnu。有用。还有一个错误: cout
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多