鱼C论坛

 找回密码
 立即注册
查看: 1756|回复: 17

[已解决]冒泡排序函数调用

[复制链接]
发表于 2019-1-3 21:11:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>    //冒泡排序
#define N 100
int arr[N] = {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[i]>arr[i+1])
                        {
                                int temp = arr[i];
                                arr[i] = arr[i+1];
                                arr[i+1] = temp;
                                sorted = false;
                        }
                }
        }
}
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for(i=0;i<n;i++)
        {
                scanf("%d", &arr[i]);
        }
        bubble_sort(arr, n);
        for(i=0;i<n-1;i++)
        {
                printf("%d ", arr[i]);
        }
        printf("%d\n", arr[i]);
        return 0;
}
以上是正确的代码
以下是希望的到改善的代码,我想问题就是在局部变量的问题上(希望能够通过函数调用实现!最近有点短路!!!望解决!!!!!)
#include<stdio.h>    //冒泡排序
#define N 100
int arr[N] = {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[i]>arr[i+1])
                        {
                                swap(arr[i], arr[i+1]);
                                sorted = false;
                        }
                }
        }
}
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for(i=0;i<n;i++)
        {
                scanf("%d", &arr[i]);
        }
        bubble_sort(arr, n);
        for(i=0;i<n-1;i++)
        {
                printf("%d ", arr[i]);
        }
        printf("%d\n", arr[i]);
        return 0;
}
最佳答案
2019-1-4 19:06:36
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for (i = 0; i<n; i++)
        {
                scanf("%d", &arr[i]);//1
        }
        bubble_sort(arr, n);
        for (i = 0; i<n - 1; i++)
        {
                printf("%d ", arr[i]);//2
        }
        printf("%d\n", arr[i]);//3
}
网页上传的时候把代码里原来的【i】给抹掉了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-3 21:57:35 | 显示全部楼层
要用指针才可以改变调用者的变量
void swap(int *a,int *b)
{
        int temp =* a;
        *a = *b;
        *b = temp;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-3 22:36:41 | 显示全部楼层
rencaixiaomeng 发表于 2019-1-3 21:57
要用指针才可以改变调用者的变量
void swap(int *a,int *b)
{

嗯,我之前试过了,吧swap哪里的参数变量改成int 型的指针也没有用
bubble_sort.png.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 11:46:12 | 显示全部楼层
void swap(int &a, int &b)
{
        int temp = a;
        a = b;
        b = temp;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-4 12:11:00 | 显示全部楼层

还是不行!!!?
如图所示的问题
bubble_sort.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i], &arr[i + 1]);
.
.
.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 13:43:32 | 显示全部楼层
#include<stdio.h>    //冒泡排序
#define N 100
int arr[N] = { 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[i]>arr[i + 1])
                        {
                                swap(&arr[i], &arr[i + 1]); ////这里要改
                                sorted = false;
                        }
                }
        }
}
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for (i = 0;i<n;i++)
        {
                scanf("%d", &arr[i]);
        }
        bubble_sort(arr, n);
        for (i = 0;i<n - 1;i++)
        {
                printf("%d ", arr[i]);
        }
        printf("%d\n", arr[i]);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-4 14:22:49 | 显示全部楼层
rencaixiaomeng 发表于 2019-1-4 13:43
#include    //冒泡排序
#define N 100
int arr[N] = { 0 };

还是有bug
bubble_sort1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-4 14:23:44 | 显示全部楼层

而且swap也是照你的换的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmm还是不行呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 14:39:24 | 显示全部楼层

26,28行arr[i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 14:40:44 | 显示全部楼层
if (arr[i]>arr[i + 1])
        {
                swap(&arr[i], &arr[i + 1]);
                sorted = false;
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 14:41:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-4 15:33:31 | 显示全部楼层

结果好像是地址(但是又没0X!!!/
bubble_sort.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 15:45:12 | 显示全部楼层
lemon3 发表于 2019-1-4 15:33
结果好像是地址(但是又没0X!!!/

main函数里的索引没改吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-4 18:29:01 | 显示全部楼层
Mountain_gs 发表于 2019-1-4 15:45
main函数里的索引没改吧

main函数要怎么改呀,从来没改过这儿啊!!!
#include<stdio.h>    //冒泡排序
#define N 100
int arr[N] = { 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[i]>arr[i + 1])
                        {
                                swap(&arr[i], &arr[i + 1]); ////这里要改
                                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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 19:06:36 | 显示全部楼层    本楼为最佳答案   
int main()
{
        int n;
        scanf("%d", &n);
        int i;
        for (i = 0; i<n; i++)
        {
                scanf("%d", &arr[i]);//1
        }
        bubble_sort(arr, n);
        for (i = 0; i<n - 1; i++)
        {
                printf("%d ", arr[i]);//2
        }
        printf("%d\n", arr[i]);//3
}
网页上传的时候把代码里原来的【i】给抹掉了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-4 19:09:25 | 显示全部楼层
Mountain_gs 发表于 2019-1-4 19:06
网页上传的时候把代码里原来的【i】给抹掉了。

谢谢大葛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 04:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表