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

C语言排序算法之冒泡排序

1.冒泡排序概念 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地交换相邻的元素,将较大的元素“冒泡”到数组的末尾。...2.冒泡排序图解 给定一个乱序数组7,1,9,5,2,6,4降序排列 首先要比较相邻两个元素的大小,然后如果满足前一个数大于后一个数则交换 第一趟 7>1,交换得1,7,9,5,2,6,4 第二次1,7,9,5,2,6,4...直到1,5,2,6,4,7,9 以此类推 直到六趟后整个数组变为 1,2,4,5,6,7,9 至此数组有序且降序 根据以上,我们不难发现,一个长度为n的数组,最多经过n-1趟后,数组有序 每一趟最多排序...7,1,9,5,2,6,4 }; int sz = sizeof(arr) / sizeof(arr[0]); bubblesort(arr, sz); printarr(arr, sz); } 运行结果 4.冒泡排序代码改进

1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    冒泡排序算法,C语言冒泡排序算法详解

    冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。 冒泡排序的原理是:从左到右,相邻元素进行比较。...以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。...比如对下面这个序列进行从小到大排序: 90 21 132 -58 34 第一轮: 90 和 21比,90>21,则它们互换位置: 21 90 132 -58 34 90 和 132 比,90...因为冒泡排序有一个特点,这个程序是从小到大排序,所以第一轮排序以后,最大的数就会浮到最右面;第二轮排序以后,第二大的数会浮到倒数第二个位置;第三轮排序以后,第三大的数会浮到倒数第三个位置……也就是说,排序多少轮...,就有多少个数字已经按排序要求排好了,它们不需要再比较。

    1.9K20

    排序算法c语言_哪种排序算法最快

    一、排序算法系列目录说明 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 希尔排序(Shell Sort) 选择排序(Selection Sort) 快速排序(Quick...) 桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。...每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。...N 个数据均匀的分配到 K 个桶中 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。...算法思想和散列中的开散列法差不多,当冲突时放入同一个桶中;可应用于数据量分布比较均匀,或比较侧重于区间数量时。 桶排序最关键的建桶,如果桶设计得不好的话桶排序是几乎没有作用的。

    2.3K30

    【C语言排序算法之选择排序

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。...首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。...选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。...选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。...j; for (i = 0 ; i < len - 1 ; i++) { int min = i; for (j = i + 1; j < len; j++) //走訪未排序的元素

    2.3K10

    排序算法-选择堆排序(C语言)

    1基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的 数据元素排完 。...2 直接选择排序: 在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素。...选择排序的单趟就是找出最大的值的下标maxi和最小值的下标mini,然后将最小值放在最左边,最大值放在最右边。...稳定性:不稳定 3 堆排序排序 (Heapsort) 是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是 通过堆来进行选择数据。...堆排序在前面的一篇文章中有详细介绍: http://t.csdnimg.cn/S4Yso 1. 堆排序使用堆来选数,效率就高了很多。 2.

    23010

    CC++语言常用排序算法

    3、算法的时间复杂度和空间复杂度 所谓算法的时间复杂度,是指执行算法所需要的计算工作量。 一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。...D.L.shell于年在以他名字命名的排序算法中实现 了这一思想。...算法先将要排序的一组数按某个增量d分成若干组,每组中 记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量 对它进行,在每组中再进行排序。...当增量减到时,整个要排序的数被分成 一组,排序完成。 下面的函数是一个希尔排序算法的一个实现,初次取序列的一半为增量, 以后每次减半,直到增量为。 希尔排序是不稳定的。...因为它很少可以在灵活性, 简便性, 尤是速度上超过其他排序算法.

    23220

    C语言 排序算法_C语言中三大经典的排序算法

    前言 一、插入排序 1.1直接插入排序 1.2希尔排序 二.选择排序 2.1直接选择排序 2.2堆排序 三 交换排序 3.1冒泡排序 3.2快速排序 3.3快速排序的优化(非递归) 四 归并排序...4.1归并排序递归版本 4.2归并排序非递归版本 总结 ---- 前言 常见的排序算法如下: 一、插入排序 1.1直接插入排序 基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中...: 元素集合越接近有序,直接插入排序算法的时间效率越高 时间复杂度:O(N^2) 空间复杂度:O(1),它是一种稳定的排序算法 稳定性:稳定 1.2希尔排序 希尔排序法又称缩小增量法。...(非递归) 主要通过数据结构栈来模拟实现类似于二叉树的前序遍历 如果有同学对C语言实现栈不熟悉可以点一下链接:C源实现数据结构栈 具体代码如下: typedef int STDataType; typedef...归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。

    2.7K20

    排序算法-线性算法(Java语言实现)

    上两节中,我带你着重分析了几种常用排序算法的原理、时间复杂度、空间复杂度、稳定性等。今天,我会讲三种时间复杂度是 image.png 的排序算法:桶排序、计数排序、基数排序。...因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。...我们之前讲的快排,时间复杂度可以做到 O(nlogn),还有更高效的排序算法吗?桶排序、计数排序能派上用场吗?手机号码有 11 位,范围太大,显然不适合用这两种排序算法。...针对这个排序问题,有没有时间复杂度是 O(n) 的算法呢?现在我就来介绍一种新的排序算法,基数排序。...】排序算法之桶排序 - 知乎 https://zhuanlan.zhihu.com/p/125737294 java/13_sorts · 编程语言算法集/algo - 码云 - 开源中国 https:

    47220

    CC++语言常用排序算法

    3、算法的时间复杂度和空间复杂度 所谓算法的时间复杂度,是指执行算法所需要的计算工作量。 一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。...D.L.shell于年在以他名字命名的排序算法中实现 了这一思想。...算法先将要排序的一组数按某个增量d分成若干组,每组中 记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量 对它进行,在每组中再进行排序。...当增量减到时,整个要排序的数被分成 一组,排序完成。 下面的函数是一个希尔排序算法的一个实现,初次取序列的一半为增量, 以后每次减半,直到增量为。 希尔排序是不稳定的。...因为它很少可以在灵活性, 简便性, 尤是速度上超过其他排序算法.

    45510

    Go 语言算法之美—基础排序

    前言:录制 rosedb 视频的时候,挖了个坑,说要用 Go 语言实现常见的数据结构和算法,虽然现在这样的文章已经很多了,但是玫瑰哥?有坑必填!...只能硬着头皮写了,这个系列,就叫做 Go 语言算法之美吧! 排序是一个十分古老的问题,也是计算机领域很经典的算法问题之一,后续的几篇文章,我将对常见的排序算法进行讲述。...我将会附上完整的代码,并且推荐一些相关的 Leetcode 题目,不仅可以用来学习巩固算法知识,还能够帮助你在面试当中,更加的游刃有余。 本篇文章介绍三种基础排序算法:冒泡排序、选择排序、插入排序。...下图比较直观的展示了冒泡排序的流程: ?...下面这张动图可以帮助你理解选择排序的整个过程: ?

    32920

    Go 语言算法之美—线性排序

    前面的两篇文章分别讲述了基础的排序算法,以及应用更加广泛的 O(nlogn) 的排序算法,今天再来看看几种特殊的线性排序算法,之所以叫线性,是因为他们的主要思想都不是基于数据比较,而且时间复杂度接近 O...桶排序排序的原理理解起来很简单,首先根据要排序的数据的最大和最小值,划分若干个区间,假设排序数据中的最小值是 1 ,最大值是 25,那么可以划分为 5 个区间,每个区间分别是 0-5,5-10,10...每个数据区间,一般叫做“桶”,然后可以将数据划分到各个桶内,如下: 划分完成之后,在桶内部分别进行排序(可以选择复杂度为 O(nlogn) 的排序算法),然后再依次将数据从桶内取出,这样整个数据就是有序的了...,因此桶内数据并不需要排序。...基数排序比较适用于数值较大或者字符串排序的场景,比如要针对一批手机号进行排序,手机号有 11 位,数值较大,不太适合使用桶排序或者计数排序

    24010

    Go 语言算法之美—进阶排序

    上一篇文章讲述了几种基础的排序算法,可以回顾一下:Go 语言算法之美—基础排序,这几种算法平均情况下的时间复杂度都是 O(n2),在大规模数据下是非常低效的,所以它们的应用并不多。...这篇文章再来看看几种在实践当中更加常用、也更加复杂一点的排序算法,分别是希尔排序、堆排序、快速排序、归并排序。...1、希尔排序 希尔排序其实是对插入排序的一种优化,回想一下,插入排序的流程是:将数据分为了已排序区间和未排序区间,依次遍历未排序区间的值,将其插入到已排序区间合适的位置。...分治思想是很多复杂算法的基础,例如归并排序、快速排序、二分查找等等。...快速排序通常叫做“快排”,它应该是应用最广泛的一个排序算法了,很多编程语言内置的排序方法,都或多或少使用到了快速排序,因为快速排序的时间复杂度可以达到 O(nlogn),并且是原地排序,前面介绍的几种排序算法都无法将这两个优点结合起来

    33730

    排序算法-下(Java语言实现)

    今天,我讲两种时间复杂度为 image.png 的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序,比上一节讲的那三种排序算法要更常用。...为了阅读方便,我这里只给出伪代码,你可以翻译成你熟悉的编程语言。...跟归并排序一样,我还是用伪代码来实现,你可以翻译成你熟悉的任何语言。...归并排序算法是一种在任何情况下时间复杂度都比较稳定的排序算法,这也使它存在致命的缺点,即归并排序不是原地排序算法,空间复杂度比较高,是 O(n)。正因为此,它也没有快排应用广泛。...https://time.geekbang.org/column/article/41913 java/12_sorts · 编程语言算法集/algo - 码云 - 开源中国 https://gitee.com

    43910

    排序算法-上(Java语言实现)

    排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。 排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。...思考题:插入排序和冒泡排序的时间复杂度相同,都是 image.png ,在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢? 如何分析一个“排序算法”?...我们今天讲的三种排序算法,都是原地排序算法排序算法的稳定性 仅仅用执行效率和内存消耗来衡量排序算法的好坏是不够的。针对排序算法,我们还有一个重要的度量指标,稳定性。...稳定排序算法可以保持金额相同的两个对象,在排序之后的前后顺序不变;如果前后顺序发生变化,那对应的排序算法就叫作不稳定的排序算法。...后面讲排序优化的时候,我会讲到,有些编程语言中的排序函数的实现原理会用到插入排序算法。今天讲的这三种排序算法,实现代码都非常简单,对于小规模数据的排序,用起来非常高效。

    34420

    选择排序算法(C语言实现)

    这个程序就是选择排序算法。...引用选择排序算法百度百科 简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;...以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。...以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列: 初始序列:{2 4 7 1 6 9 8 3 0 5}    第1趟:2与0交换:0{4 7 1 6 9 8 3 2 5}   ...冒泡排序可以查看点击,非常抱歉的是这个里面是冒泡排序的裸代码,查看代码其实可以体会到冒泡排序本质是:排序的数像水泡一样,依次比较,大的数往后移,最后大的数排在最后。

    1.7K20

    算法-排序算法-选择排序

    /** * 排序算法-选择排序 * 选择排序(Selection Sort)算法也是比较简单的排序算法,其思路比较直观。选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。...* 选择排序算法通过选择和交换来实现排序,其排序流程如下: * (1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。...至此,便完成了对原始数组的从小到大的排序。 * * 选择排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行n-1步的中间排序。...* 这种排序方法思路很简单直观,但是缺点是执行的步骤稍长,效率不高。...size; i++) { ints[i] = (int)(Math.random() * 100 ); } System.out.println("排序前的数组

    1.5K30

    【C语言数据结构】排序(归并排序|计数排序|排序算法复杂度)

    今日更新了归并,计数排序的内容 欢迎大家关注点赞收藏⭐️留言 归并排序 归并过程如下: 代码实现(递归) //时间复杂度:O(N*logN) //空间复杂度:O(N) void _MergeSort...计数排序(非比较排序) 代码实现 void CountSort(int* a, int n) { int min = a[0], max = a[0]; for (int i = 1; i < n;...: 统计相同元素出现的次数 根据统计的结果将序列回收到原来的序列中 计数排序需要我们新创建一个统计数组,按理来说,数组下标就可以用来当作统计的数,该位置就来存放该数出现的次数。...但是,如果要排序的数是从一千多开始的,这样前面的空间就全部浪费了。所以我们采用相对映射的方法。即用待排序的数中,最大的数-最小的数+1就可以得到范围,从而减少空间浪费。...最后进行排序,记得加回最小值min,这样数据才不会被改变。 排序算法的复杂度及稳定性 稳定性:指的是相同的数,在排序之后的相对位置没有改变。

    13410

    算法-排序算法-希尔排序

    /** * 排序算法-希尔排序 * 冒泡排序算法、选择排序算法和插入排序算法,虽然思路比较直观,但是排序的效率比较低。 * 对于大量的数据需要排序时,往往需要寻求其他更为高效的排序算法。...Shell排序算法便是其中一种 * Shell排序算法严格来说基于插入排序的思想,其又称为希尔排序或者缩小增量排序,思路如下: * (1)将有n个元素的数组分成n/2个数字序列,第1个数据和第n/2...* (3)然后,再变为n/4个序列,再次排序。 * (4)不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。...size; i++) { ints[i] = (int)(Math.random() * 100 ); } System.out.println("排序前的数组...:" + Arrays.toString(ints)); } System.out.println("排序后的数组:" + Arrays.toString(ints))

    74320

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券