lemon3 发表于 2019-1-3 21:11:54

冒泡排序函数调用

#include<stdio.h>    //冒泡排序
#define N 100
int arr = {0};
#define bool int
#define true 1
#define false 0
/*typedef enum
{
        true = 1, false = 0
}bool;*/

void bubble_sort(int arr[], int n)
{
        int i;
        bool sorted = false;
        for(;sorted = !sorted;n--)
        {
                for(i=0;i<n-1;i++)
                {
                        if(arr>arr)
                        {
                                int temp = arr;
                                arr = arr;
                                arr = temp;
                                sorted = false;
                        }
                }
        }
}
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for(i=0;i<n;i++)
        {
                scanf("%d", &arr);
        }
        bubble_sort(arr, n);
        for(i=0;i<n-1;i++)
        {
                printf("%d ", arr);
        }
        printf("%d\n", arr);
        return 0;
}
以上是正确的代码
以下是希望的到改善的代码,我想问题就是在局部变量的问题上(希望能够通过函数调用实现!最近有点短路!!!望解决!!!!!)
#include<stdio.h>    //冒泡排序
#define N 100
int arr = {0};
#define bool int
#define true 1
#define false 0
/*typedef enum
{
        true = 1, false = 0
}bool;*/

void swap(int a,int b)
{
        int temp = a;
        a = b;
        b = temp;
}
void bubble_sort(int arr[], int n)
{
        int i;
        bool sorted = false;
        for(;sorted = !sorted;n--)
        {
                for(i=0;i<n-1;i++)
                {
                        if(arr>arr)
                        {
                                swap(arr, arr);
                                sorted = false;
                        }
                }
        }
}
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for(i=0;i<n;i++)
        {
                scanf("%d", &arr);
        }
        bubble_sort(arr, n);
        for(i=0;i<n-1;i++)
        {
                printf("%d ", arr);
        }
        printf("%d\n", arr);
        return 0;
}

rencaixiaomeng 发表于 2019-1-3 21:57:35

要用指针才可以改变调用者的变量
void swap(int *a,int *b)
{
      int temp =* a;
      *a = *b;
      *b = temp;
}

lemon3 发表于 2019-1-3 22:36:41

rencaixiaomeng 发表于 2019-1-3 21:57
要用指针才可以改变调用者的变量
void swap(int *a,int *b)
{


嗯,我之前试过了,吧swap哪里的参数变量改成int 型的指针也没有用

Mountain_gs 发表于 2019-1-4 11:46:12

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

lemon3 发表于 2019-1-4 12:11:00

Mountain_gs 发表于 2019-1-4 11:46


还是不行!!!?
如图所示的问题

Mountain_gs 发表于 2019-1-4 13:41:24

lemon3 发表于 2019-1-4 12:11
还是不行!!!?
如图所示的问题

c语言不支持引用,我之前不知道。
你用二楼的方法,swap()用的时候加上取地址符试试。

void swap(int *a,int *b)
{
      int temp =* a;
      *a = *b;
      *b = temp;
}
.
.
.
swap(&arr, &arr);
.
.
.

rencaixiaomeng 发表于 2019-1-4 13:43:32

#include<stdio.h>    //冒泡排序
#define N 100
int arr = { 0 };
#define bool int
#define true 1
#define false 0
/*typedef enum
{
true = 1, false = 0
}bool;*/

void swap(int *a, int *b) //这里要改
{
        int temp = *a;
        *a = *b;
        *b = temp;
}
void bubble_sort(int arr[], int n)
{
        int i;
        bool sorted = false;
        for (;sorted = !sorted;n--)
        {
                for (i = 0;i<n - 1;i++)
                {
                        if (arr>arr)
                        {
                                swap(&arr, &arr); ////这里要改
                                sorted = false;
                        }
                }
        }
}
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for (i = 0;i<n;i++)
        {
                scanf("%d", &arr);
        }
        bubble_sort(arr, n);
        for (i = 0;i<n - 1;i++)
        {
                printf("%d ", arr);
        }
        printf("%d\n", arr);
        return 0;
}

lemon3 发表于 2019-1-4 14:22:49

rencaixiaomeng 发表于 2019-1-4 13:43
#include    //冒泡排序
#define N 100
int arr = { 0 };


还是有bug

lemon3 发表于 2019-1-4 14:23:44

lemon3 发表于 2019-1-4 14:22
还是有bug

而且swap也是照你的换的

lemon3 发表于 2019-1-4 14:26:32

Mountain_gs 发表于 2019-1-4 13:41
c语言不支持引用,我之前不知道。
你用二楼的方法,swap()用的时候加上取地址符试试。



emmm还是不行呀

Mountain_gs 发表于 2019-1-4 14:39:24

lemon3 发表于 2019-1-4 14:26
emmm还是不行呀

26,28行arr

Mountain_gs 发表于 2019-1-4 14:40:44

if (arr>arr)
        {
                swap(&arr, &arr);
                sorted = false;
        }

Mountain_gs 发表于 2019-1-4 14:41:24

Mountain_gs 发表于 2019-1-4 14:40


索引没传上来

lemon3 发表于 2019-1-4 15:33:31

Mountain_gs 发表于 2019-1-4 14:41
索引没传上来

结果好像是地址(但是又没0X!!!/

Mountain_gs 发表于 2019-1-4 15:45:12

lemon3 发表于 2019-1-4 15:33
结果好像是地址(但是又没0X!!!/

main函数里的索引没改吧

lemon3 发表于 2019-1-4 18:29:01

Mountain_gs 发表于 2019-1-4 15:45
main函数里的索引没改吧

main函数要怎么改呀,从来没改过这儿啊!!!
#include<stdio.h>    //冒泡排序
#define N 100
int arr = { 0 };
#define bool int
#define true 1
#define false 0
/*typedef enum
{
true = 1, false = 0
}bool;*/

void swap(int *a, int *b) //这里要改
{
      int temp = *a;
      *a = *b;
      *b = temp;
}
void bubble_sort(int arr[], int n)
{
      int i;
      bool sorted = false;
      for (;sorted = !sorted;n--)
      {
                for (i = 0;i<n - 1;i++)
                {
                        if (arr>arr)
                        {
                              swap(&arr, &arr); ////这里要改
                              sorted = false;
                        }
                }
      }
}
int main()
{
      int n;
      scanf("%d", &n);
      int i;
      for (i = 0;i<n;i++)
      {
                scanf("%d", &arr);
      }
      bubble_sort(arr, n);
      for (i = 0;i<n - 1;i++)
      {
                printf("%d ", arr);
      }
      printf("%d\n", arr);
      return 0;
}

Mountain_gs 发表于 2019-1-4 19:06:36


int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for (i = 0; i<n; i++)
        {
                scanf("%d", &arr);//1
        }
        bubble_sort(arr, n);
        for (i = 0; i<n - 1; i++)
        {
                printf("%d ", arr);//2
        }
        printf("%d\n", arr);//3
}
网页上传的时候把代码里原来的【i】给抹掉了。

lemon3 发表于 2019-1-4 19:09:25

Mountain_gs 发表于 2019-1-4 19:06
网页上传的时候把代码里原来的【i】给抹掉了。

谢谢大葛
页: [1]
查看完整版本: 冒泡排序函数调用