C语言 冒泡排序出错

y4ekin9u  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(152)

冒泡排序

大家好,在学习了气泡排序算法的工作原理(通过比较两个相邻的元素,并在必要时交换它们)之后,我试图编码这个问题,但我一直无法做到。

#include<stdio.h>
int swap(int a, int b);

int main() {
  // swap(3,4);
  int array[20], n,;
  printf("Enter the value of integers to be added to the matrix: ");
  scanf("%d", &n);
  printf("Enter the integers:");
  for (int i = 0; i < n; i++) {
    scanf("%d", &array[i]);
  }

  swap(array[1], array[2]);

  for (int j = 0; j < n; j++) {
    if (array[j] > array[j + 1]) {
      swap(array[j], array[j + 1]);}
    } else {
      continue;
    }
  }

  return 0;
}

int swap(int a, int b) {
  int temp = 0;
  temp = a;
  a = b;
  b = temp;
}

这是我写的代码,我想在循环中,当我比较相邻元素时,我不会遍历数组,如果不是,当比较元素时,如何遍历数组的话,如果你能帮助我理解,我在哪里犯了错误,以及如何纠正它,我会非常感激。
此致X
这是我得到的输出

make -s
 ./main
Enter the value of integers to be added to the matrix: 5
Enter the integers:5 4 3 2 1
3 44 53 42 31 20 1
d7v8vwbk

d7v8vwbk1#

#include <stdio.h>
#include <stdlib.h>

void    ft_swap(int *i, int *x)
{
    int tmp;
    
    tmp = *i;
    *i = *x;
    *x = tmp;
}

int is_sorted(int *ary, int len)
{
    int i;

    i = 0;
    while (i < len - 2)
    {
        if (ary[i] > ary[i + 1])
            return (1);
        i++;
    }
    return (0);
}

int sort_array(int *ary, int len)
{
    int i;

    i = 0;
    while (is_sorted(ary, len) == 1)
    {
        if (ary[i] > ary[i + 1])
            ft_swap(&ary[i], &ary[i + 1]);
        i++;
        if(i == (len - 1))
            i = 0;
    }
    return (0);
}

int *argv_to_array(int len, char **argv)
{
    int i;
    int *ary;

    i = 0;
    ary = malloc(sizeof(int) * len - 1);
    while(i < len - 1)
    {
        ary[i] = atoi(argv[i + 1]);
        i++;
    }
    return(ary);
}

int main(int argc, char **argv)
{
    int i;
    int *ary;

    if(argc > 1)
    {
        i = 0;
        ary = argv_to_array(argc, argv);
        sort_array(ary, argc);
        while(i < argc - 1)
        {
            printf("%i ", ary[i]);
            i++;
        }
        free(ary);
    }
    return (0);
}

你的交换函数是错误的。这是我的代码。但有更好的方法。排序算法(和许多其他事情)列表是更好的和更容易的工作,如果你进入它。

相关问题