首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的冒泡排序函数跳过else if并返回未定义的?

冒泡排序是一种简单的排序算法,它通过比较相邻元素的大小来进行排序。根据你描述的情况,你的冒泡排序函数可能存在以下问题:

  1. 逻辑错误:冒泡排序算法中的else if语句可能存在逻辑错误,导致跳过该分支并返回未定义的结果。你需要仔细检查else if语句的条件和执行语句,确保逻辑正确。
  2. 变量作用域问题:如果你在冒泡排序函数中使用了局部变量,并且在else if语句中引用了该变量,可能会导致未定义的结果。请确保变量的作用域正确,并且在else if语句中可以正确访问到该变量。
  3. 数组越界:冒泡排序算法需要遍历整个数组,并进行比较和交换操作。如果你的代码中存在数组越界的情况,可能会导致未定义的结果。请确保在遍历数组时,不会超出数组的有效索引范围。
  4. 函数调用问题:如果你的冒泡排序函数在调用过程中存在问题,比如传递参数错误、函数声明错误等,也可能导致未定义的结果。请确保函数的调用方式正确,并且传递的参数符合函数的要求。

针对以上问题,你可以逐一排查并修复。如果你需要更具体的帮助,请提供你的冒泡排序函数的代码,以便我们更好地帮助你解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

指针详解(冒泡排序、qsort、回调函数、转移表)(三)

如果能够将这些操作封装到一个函数中,通过参数来区分不同操作,那么代码就会更加简洁和易于维护。...回调函数改造思路: 1、定义回调函数,该函数接受两个整数参数返回一个整数。 2、在主函数中,创建一个数组,其中包含所有可能操作符和对应回调函数。...而判断有序方法,则是如果一趟冒泡排序下来,没有一对交换,则证明有序。 反之,如果有交换,则flag置为0,表示无序,则继续下一趟冒泡排序。..., 这个函数用来比较待排序数组中两元素 测试qsort函数排序整型数据 正常使用冒泡排序 void bubbleSort(int arr[], int sz) { int i = 0; //...int sz)函数 arr进入void bubbleSort2函数后 执行以下模拟冒泡语句 每两个元素依次进入cmp进行比较 (为什么要用强制转换:因为void*类型是方便输入数据为任意类型

12310
  • C语言:指针4(超级详细讲解qsort函数使用)

    ,把add函数地址传给了p函数,p用函数指针接收命名为x, 然后可以通过x把a和b数值传过去给add,然后返回值给 r 然后打印 x里存放是add函数地址 这就是一个回调函数 qsort函数 下面是冒泡排序...,冒泡排序只能排序整形,无法排序浮点和字符还有结构体,我们就 需要用到qsort函数来进行排序 //冒泡排序 void add(int arr[], int sz) { for (int i...qsort函数我们需要传4个参数(指向数组第1个元素指针(首元素),元素个数值,元素类型大小,比较函数) 比较函数参数为什么使用void*类型呢,因为void*可以接收全部参数,,但是比较数值必须要强制类型转换...排序整行 整行排序我们可以使用减法 返回数值这个函数为什么要用减法呢 因为x如果大于y,x减y的话就会得到大于0数字 如果x小于y,x减y就会得到小于0数值, 等于的话x减y就是0了 //返回数值..., 为什么不用int指针类型呢,因为如果用int的话,加1跳过4个字节,我们交换char类型时候,char是1个字节,如果我们用int就会跳4个字节,所以我们要用char指针类型 size_f是类型大小

    10310

    今天发疯,写一下学校数组作业

    请输入整数"); scanf("%d", &arr[n]); } selectionsort(arr, n); } 冒泡排序 最直接冒泡排序 如果是对10个数字进行冒泡排序,那么需要进行9轮比较...我们在下一次循环中,只要对无序进行冒泡排序即可。...int last_change = 0;//标记每轮最后一次交换位置 for (int i = 0; i < sz - 1; i++) {//这里为什么是sz呢,因为最后一个数字不用冒泡排序啦...3(qsort函数) 以上冒泡排序都有共同缺点,那就是只能对整形数据进行排序,如果要比较对象为结构体等其他类型,我们就无法使用上述代码进行比较。...,我们考虑将base强制转化为别的类型,先考虑将 void*转化为int*,但这样显然不太好,因为int*跳过字节数为4,我们只想跳过一个字节,因此我们将其转化为char*类型,再加上j*width。

    7910

    好用函数,qsort函数大详解(干货满满!)(初阶)

    前言; 一直在思考今天要写什么类型文章,看到之前写冒泡排序写法,不过冒牌排序算法只能针对于整型,我们如果想要排序浮点型,字符型数据呢?...这个时候突然想到了比冒泡排序还好用一个库函数,就是我们今天主角——qsort函数,下面不多废话,直接进入正文: 正文: 1.qsort函数 1.1qosrt函数是什么 qosort函数其实是一个基于快速排序算法...(大家一定要将那个网站保存下来),如下图所展示: 我们可以通过上图很清晰看出来qsort函数头文件是stdlib.h,以及它返回类型是void,这个时候很多读者朋友们就疑惑了,为什么返回类型是...(c > 0) return 1; //这里返回值是不固定,只要是大于0就好 else if (c < 0) return -1; //这里也是不固定 else return...,qsort库函数代码更短一点,可能很多读者朋友会这么想:那么我们为什么不直接去学qsort函数而去学冒泡排序呢?

    5410

    【数据结构和算法】--- 基于c语言排序算法实现(2)

    1.1 冒泡排序 说起冒泡排序,这也算是在我们学习编程时遇到第一个排序算法,总体逻辑就是从待排序数组第一个一直向后遍历,遇到比自己大就记录该值,遇到比自己小就交换,直到到达待排序数组结尾,此时待排序数组长度...整个递归逻辑主体部分为partion()函数,用来划分基准值左右两部分,返回当前基准值下标。...最后直到left == right,将基准值和相遇点值交换Swap(&a[keyi], &a[left]),返回基准值下标return keyi。...最后在交换基准值和前指针对应元素(Swap(&a[prev], &a[keyi])),返回前指针对应元素下标(return prev;)。...>= end(即当前元素个数小于等于一个)结束返回,当左右部分递归完便开始合并。

    10710

    C语言指针超详解——最终篇一

    ,单位为字节 int(*compare)(const void*,const void*) --- 一个返回类型为 int 函数指针,两个参数类型都是 const void* 想你可能已经猜出来...qosrt 排序原理了,没错,就是根据 size 大小去解引用 base 指向数据,然后调用 compare 函数比较两个数据大小,根据其返回结果按照字节依次将两个数据中数据进行交换(也就是交换内存中这两个数据每个字节存储数据...void* p2) { if (*(int*)p1 > *(int*)p2) return 1; else if (*(int*)p1 < *(int*)p2) return -1; else...模拟实现 qsort 函数 为了简单起见,我们使用冒泡排序模拟实现这个 qsort 函数。 (如果你不了解冒泡排序,可以看看指针强化篇这篇博客) 想一想我们需要什么?...qsort 函数工作,但是要注意,由于我们使用冒泡排序,时间复杂度为O(n2),所以在处理特别多数据时可能会耗费大量时间。

    6610

    【C语言】回调函数

    函数都是回调函数; 三、利用冒泡排序思想模拟实现qsort()函数 这个bubble_sort函数可以排序任意类型数据 两个核心函数: 交换函数,这里传参传分别是两个元素地址和每个元素类型大小...跳过j*width个字节,相当于跳过j个元素 (3)bubble_sort()函数实现部分;相当于qsort函数实现,但qsort核心思想使用快排,以下这个函数核心思想是冒泡排序; void...const void* p2)) { size_t i = 0; //确定趟数 for (i = 0; i < num - 1; i++) { //一趟冒泡排序过程...函数传入首地址是什么类型,所以用void接收,所以这里我们将它强制转换为char*类型,因为char*指针+1跳过一个字节,使base跳过j*width个字节,相当于跳过j个元素 if (...compare((char*)base + j * width, (char*)base + (j + 1) * width) > 0) { //若compare函数返回>0,

    17710

    C语言重点突破(2)指针(三)

    冒泡排序)  首先介绍一下冒泡排序思想 冒泡排序(Bubble Sort)是一种简单排序算法,它重复地走访过要排序数列,一次比较两个元素,如果它们顺序错误就把它们交换过来,直到没有任何一对数字需要交换为止...冒泡排序基本思想是,将待排序元素看作为竖向排列气泡,在每一轮排序中,从下往上依次比较相邻两个气泡大小关系,根据需要交换相邻两个元素位置,大元素就像气泡一样往上“飘”。...冒泡排序时间复杂度为O(n^2),空间复杂度为O(1)。...同样地,如果一个函数需要返回不同类型数据,也可以使用 void* 作为返回值类型。 基于void*特性,使得qsort可以排序任意类型元素。...下面我们来开始实现,首先qsort函数是需要一个比较函数,如果p1大于p2就返回一个大于0值,否则返回一个小于0值,相等则返回0.

    8910

    【C指针(五)】6种转移表实现整合longjmp()setjmp()函数和qsort函数详解分析&&模拟实现

    setjmp()会将当前函数执行环境信息保存到env中,返回0。 然后程序可以正常执行。...工作原理是: setjmp()函数会保存当前函数调用栈(包括函数参数和局部变量等信息)环境,返回0。 之后程序可以正常执行。...程序跳转回setjmp()设置环境env,此时setjmp()返回1。 执行else块内代码,打印"Jumped back to func()"。 func()返回,主函数结束。...: 定义一个int类型数据比较函数 通过减法实现两个int*指针所指向数据比较 返回值大于0表示p1大于p2(升序),小于0表示p1小于p2(降序) 实现了冒泡排序比较规则 int int_cmp...三、qsort函数细解 3.1 类比冒泡排序? qsort函数实现也是冒泡排序算法。

    28510

    【Python从入门到精通】(十)Python流程控制关键字该怎么用呢?【收藏下来,常看常新】

    您好,是码农飞哥,感谢您阅读本文,欢迎一键三连哦。这篇文章主要介绍Python中流程控制关键字使用,涉及到if else,for,while等关键字 干货满满,建议收藏,需要用到时常看看。...冒泡排序每次比较左右相邻数字,如果前面的数字比后面的大则交换两个数字位置。...10, 12, 13] 最终结果是= [1, 3, 5, 9, 10, 12, 13] 冒泡排序过程介绍:从上面可以看出,外层循环负责冒泡排序进行次数,而内层循环负责将列表中相邻两个元素进行比较,...调整顺序,即将较小放在前面。...2. break语句用于完全终止当前循环,需要注意是如果是嵌套循环的话,只能中断使用break循环。还是拿前面的冒泡排序来举个例子吧!

    54030

    笨办法学 Python · 续 练习 16:冒泡、快速和归并排序

    当你尝试排序数字列表时,通常有三个备选方案: 冒泡排序 如果你对排序一无所知,这是你最可能尝试方式。它仅仅涉及遍历列表,交换你找到任何乱序偶对。...归并排序 这种排序算法将列表分成两半,然后是四个部分,直到它不能再分割为止。然后,它将这些返回东西合并,但是在合并它时,通过检查每个部分顺序,以正确顺序进行操作。...这种转换需要大量翻译,学习和猜测你正在阅读伪代码语义。 学习冒泡排序 你现在应该花时间研究这个bubble_sortPython 代码,看看我如何翻译它。确保观看我实时视频,获得更多透视。...将再次对merge_sort函数重复此过程,但是这次想让你尝试,从归并排序维基百科页面 上伪代码中实现该算法,然后再查看我怎么做。...建议你首先使用 Python 普通列表类型实现简单快速排序。这将有助于你更好地理解它。然后,使用简单 Python 代码,使其处理DoubleLinkedList(头节点)。

    36710

    C语言:深入理解指针(2)

    通过图我们可以知道,从第一个元素开始不断与后面元素做比较,一旦大于最后一个函数就交换,经过一趟冒泡排序后,最大数字9就来到了数组最后位置,这时候在进行第二次找到8……最后可以得到我们想要升序数组,...如果sz代表数组元素个数,那么我们要考虑一次冒泡排序需要进行几次比较,一共需要进行几次冒泡排序。    ...而由于第一次冒泡排序已经将数组中最大元素放在最后了,所以第二次冒泡排序只需要比较sz-2次,以此类推,所以需要比较sz-1-i次,每一次冒泡排序可以找到一个最大数放后面,那么只需要进行sz-1次冒泡排序...int count = 0; void bubble_sort(int arr[], int sz)//实现冒泡排序函数 { for (int i = 0; i < sz - 1; i++)//需要进行多少次冒泡排序...int count = 0; void bubble_sort(int arr[], int sz)//实现冒泡排序函数 { for (int i = 0; i < sz-1; i++)//需要进行多少次冒泡排序

    13310

    图解实例讲解JavaScript算法,让你彻底搞懂

    目录中术语可能看起来很吓人,但只要和我在一起,保证会以尽可能简单方式解释所有内容目    录大 O 表示法理解大 O 符号算法什么是算法,为什么要关心?...正如我之前提到,递归是循环替代方法。那么,这个函数到底要运行多少次呢?好吧,这将创建一个无限循环,因为在任何时候都无法阻止它。假设我们只需要运行循环 10 次。在第 11 次迭代函数应该返回。...这可以通过多种方式实现,包括 for-loop、Array.filter 方法等但是为了展示递归使用,将使用 helperRecursive 函数。...如果内循环完成匹配,则返回 true 否则继续外循环。这是一个视觉表示。这是代码中实现。...冒泡排序是众多排序算法中一种。在冒泡排序算法中,我们通过将每个数字与前一个数字进行比较,将较大数字交换到末尾。这是一个视觉表示。冒泡排序代码实现。

    87000

    Python数据结构与算法笔记(4)

    项和该项在散列表中所属槽之间映射被称为hash函数。hash函数将接收集合中任何项,并在槽名范围内(0和m-1之间)返回一个整数。...目标是创建一个散列函数,最大限度地减少冲突数,易于计算,均匀分布在哈希表中项。 分组求和法将项划分为相等大小块(最后一块可能不是相等大小)。...如果使用链接,成功情况,平均比较数目是1+lambda/2,如果搜索不成功,则简单地是lambda比较次数。 排序 冒泡排序 冒泡排序需要多次遍历列表。它比较相邻交换那些无序项。...选择排序冒泡排序有相同数量比较,也是O(n^2),但是由于交换数量减少,选择排序通常在基准研究中执行更快。...如果列表有多个项,分割列表递归调用两个半部分合并排序。一旦对这两个部分排序完成,就执行称为合并基本操作。合并是获取两个较小排序列表并将它们组合成单个排序新列表过程。 ? ?

    1.6K10

    详解指针(超详细)(第四卷)

    根据上文定义了四个函数计算加减乘除,那我们可不可以利用函数指针数组和转移表知识设计一个计算器呢。...三.qsort函数(回调函数应用) 为什么要把这个单独列出来呢,因为太important了 1.qsort函数原理和作用 qsort函数底层原理是快速排序,作用是对一个任何数据类型乱序数组,按照你自己排序标准进行排序...(注意字符串不能直接比较大小,而是用strcmp函数) 四.leecode算法题(qsort函数应用)(题解+思路) 五.模拟qsort函数(底层原理冒泡排序) 先演示代码和运行结果,再进行讲解 #include...那么接下来就讲一下bsort函数运行原理: 它是基于冒泡排序实现,所以我就讲解一下它与冒泡排序不同部分(后面会单独出一章讲解C语言基本排序算法) 1.if条件语句中条件判断不一样,因为基本冒泡排序算法大多情况是用来排序整型数据...,可以单纯用大于号小于号去判断,但bsort函数不仅只用来排序整型数据,所以它if判断条件要通过你传入比较函数(也就是你比较两个数据标准)返回值去判断。

    9810

    C语言(指针)8

    为什么要有 qsort 函数呢?它能帮我们做什么?在回答这个问题之前,让我们目光再回到上节我们写冒泡排序中,先思考另一个问题,为什么我们写冒泡排序只能排整形数据呢?...,所以这里没有使用 if—else 分支来判断,而是直接return了strcmp函数返回值。...要创建一个可以对任意类型数据排序函数,起个名字叫bubble_sort ,函数不需要返回值。...梳理清楚后就可以写出下面函数主体部分,用到排序算法是冒泡排序: void bubble_sort(void *pa, size_t sz, size_t width, int (*cmp)(const...(j = 0; j < sz - 1 - i; j++) { //判断大小 } if (1 == flag) { break; } } } 接下来需要调用小美写比较函数判断其返回

    8410

    JS基础第二课(数组篇)

    本章主题:数组(本章内容不多,请小伙伴们细品咯) 一、数组性质 1、概念 一组数据集合,其中每个数据都被称为元素,且可以存放任意类型元素 2、创建数组两种方式 (1)方式一:var arr =...'字符串',true] console.log(arr); 图片 二、访问数组元素 1、索引号(下标):从0开始,元素序号 2、语法:数组名[索引] 3、超出索引:返回...,数组会跳过未定义索引值,以最后索引+1做为数组实际长度 var arr=[1,23,'字符串',true] arr[5]=666...]); newArr[newArr.length]=arr[i] } console.log(newArr); 图片  六、冒泡排序...,由小到大重新排序 var arr=[22,34,28,100,234,1] for (var i = 0; i < arr.length-1; i++

    36150

    前端学习数据结构与算法系列(五):冒泡排序理解与实现

    请你用JavaScript实现一个简单冒泡排序,如果你没掌握,就会被问住。...本文采用图文方式讲解冒泡排序特点,分步骤讲解js实现思路以及相对应代码,欢迎各位感兴趣开发者阅读本文概念 从序列最右边开始比较相邻两个数字大小,再根据结果交换两个数字位置,重复这一操作算法即冒泡排序...,如果当前值<左侧相邻值,则进行位置交换 如果当前轮数等于数组长度,循环结束,返回排序数组。...console.log(bubbleSort(dataArr)); 执行结果 双层冒泡和单层冒泡比较 本来对单层冒泡很自信,认为单层效率肯定比双层效率高,结果啪啪打脸,和网上双层循环在控制台跑了一遍...为什么单层效率低 当我疑惑效率为啥慢时候,朋友给了我结论,好吧,是我太菜了。 写在最后 * 文中使用图片源自《第一本算法书》,如若侵权,请联系图雀社区公众号小编,作者立即删除相关图片。

    71020
    领券