【问题标题】:Implementing bubble sort in C在 C 中实现冒泡排序
【发布时间】:2021-04-12 00:14:04
【问题描述】:

我正在尝试实现一个排序函数,该函数将对数组中的字符进行排序。有人能说出为什么它不起作用吗?

int     main()
{
    char tab[] = {'e', 'b', 'd', 'z', 'a', 't', '\0'};
    char tab2[7] = {0};
    int i = 0, j = 0, k = 0;

    while (tab[i] != '\0')
    {
        for (j = 0; tab[j] != '\0'; j++)
        {
            if (tab[i] > tab2[j])
            {
                tab2[k] = tab[j];
                k++;
            }

        }
        k=0;
        i++;
    }
    printf("%s\n", tab2);
    return 0;
}

【问题讨论】:

  • 看来您的排序算法将使用 tab 中的最高值填充 tab2 的所有值。这不是排序的工作原理。
  • 这里没有排序算法。为什么你认为这应该有效?
  • 你前几天用错误的语言问了这个完全一样的问题。 (好吧,好吧,你加了两个没用的!= '\0'
  • 冒泡排序是一种就地排序算法,但您甚至不会尝试更改tab,因此您的任何代码都没有意义。你问怎么了,答案是:都是。
  • 这能回答你的问题吗? Bubble Sort Algorithm in C

标签: c


【解决方案1】:

'\0' 的值为 0,而小写字母的字母值为 97+,因此一旦对数组进行排序,'\0' 就位于开头。

在终端中使用man ascii 或查看wikipedia link

您可以将最终数组值初始化为 127,然后按以下方式排序:

#include <stdio.h>

void swap(char *x, char *y)
{
  if (x != y)
  {
    *x ^= *y;
    *y ^= *x;
    *x ^= *y;
  }
}

int     main()
{
    char tab[] = {'e', 'b', 'd', 'z', 'a', 't', '\0'};
    char tab2[7];

    for (int l = 0; l < 6; l++)
        tab2[l] = 127;

    tab2[6] = 0;

    int i = 0, j = 0;

    while (tab[i] != '\0')
    {
        for (j = 0; tab[j] != '\0'; j++)
        {
            if (tab[i] < tab2[j]) // this is bubble sort, check if value is inferior
                swap(&tab[i], &tab2[j]); // if it is then swap pointers
        }
        i++;
    }
    printf("%s\n", tab2);
    return 0;
}

输出:

abdetz

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2012-07-23
    • 2020-08-23
    • 2017-03-11
    • 2014-10-26
    • 2011-01-21
    • 2020-06-24
    相关资源
    最近更新 更多