人生我靠演戏 2022-11-23 16:30 采纳率: 91.2%
浏览 2
已结题

对于指针实现冒泡排序,出现的问题,希望有old big brother能解释下,我该怎么改,错的原理在哪里

img

img


为什么通过指针方式实现的冒泡排序排序不出正确结果,有人能看出来哪里错了,顺便解释下,
感谢!

  • 写回答

1条回答 默认 最新

  • bostonAlen 2022-11-23 16:48
    关注

    我个人还是觉得写一个冒泡没必要这么复杂。
    如果你单纯要练习二级指针和数组,不建议你这么写,因为这里根本就用不上二级指针,为何要复杂化呢,容易把自己都给绕晕了。
    1、用数组

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
     
    #define ARR_LEN 255 /*数组长度上限*/
    #define elemType int /*元素类型*/
     
    /* 冒泡排序 */
    /* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
    /* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
    /* elemType arr[]: 排序目标数组; int len: 元素个数 */
    void bubbleSort (elemType arr[], int len) {
        elemType temp;
        int i, j;
        for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
            for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
                if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
    }
     
    int main (void) {
        elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
        int len = 10;
        int i;
         
        bubbleSort (arr, len);
        for (i=0; i<len; i++)
            printf ("%d\t", arr[i]);
        putchar ('\n');
         
        return 0;
    }
    

    2、用指针

    //使用指针实现冒泡排序
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #define MAX 100
    //定义调用函数
    void mp(int* p, int n)
    {
        int i,j;
        int temp;//定义交换变量
        for (i = 0; i < n - 1; i++)//外层循环:一共要进行n-1躺循环
        {
            for (j = 0; j < n - 1 - i; j++)
            {
                if (*(p + j) > *(p + j + 1))
                {
                    temp = *(p + j);
                    *(p + j) = *(p + j + 1);
                    *(p + j + 1) = temp;
                }
            }
        }
        //输出元素
        printf("则冒泡排序后的结果为:\n");
        for (i = 0; i < n; i++)
        {
            printf("%3d", *(p+i));
        }
    }
    int main()
    {
        int a[MAX];
        int n;//定义个数
        int i;
        printf("请输入要比较元素的个数:");
        scanf("%d", &n);
        printf("请输入元素:");
        for (i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        //调用函数
        mp(a, n);
        
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab