首页
学习
活动
专区
工具
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.冒泡排序代码改进

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

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.

10310

简单选择排序 C语言

简单选择排序 (Simple Selection Sort)也称作直接选择排序算法步骤: 1) 设待排序的记录存放在数组Data[1…n]中。...书上的例子: 时间复杂度 O( n 2 n^2 n2) 空间复杂度 O(1) 算法特点: 1 ) 就选择排序方法本身来讲,它是一种稳定的排序 方法,但图中例子所表现出来的现象是不稳定的,这是因为上述实现选择排序算法采用...“交换记录”的策略所造成的,改变这个策略可以写出不产生“不稳定现象”的选择排序算法。...i=1;i<=L.length;i++)//利用循环打印顺序表中的数据 printf("%d ",L.Data[i].key); } void SelectSort(SqList &L)//简单选择排序...} } int main() { SqList L; InitList(L);//初始化顺序表 CreateList(L);//创建顺序表 SelectSort(L);//简单选择排序

67830

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

一、排序算法系列目录说明 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 希尔排序(Shell Sort) 选择排序(Selection Sort) 快速排序(Quick...) 桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。...每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。...N 个数据均匀的分配到 K 个桶中 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。...代码实现(C实现) 假设数据分布在[0,100)之间,每个桶内部用链表表示,在数据入桶的同时插入排序。然后把各个桶中的数据合并。

2.2K30

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

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

1.9K20

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

选择排序算法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.6K20

C语言冒泡排序升序_c语言快速排序和冒泡排序

};//十个数的无序数列 int i,j,t; printf("此程序使用冒泡排序法排列无序数列!...} } printf("排列好的字符组是:\n"); //输出排列好得吃数列 for(i=0;i<10;i++) { printf("%c...{ printf("%c ",a[i]); } return 0; } void function(char a[],int m) { //冒泡排序...:也叫升序排序法,但是相比起二分法查找只能应用于有序数列,二如何将一个无序数列变的有序就可以使用冒泡排序法!!!...对上面的过程进行总结: 该思想体现在成续上的解法是: 实例: 冒泡排序不仅仅可以应用于数字同样可以应用于字符字母的快速排序: 心得体会: 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人

2K10

图解C语言冒泡排序算法,含代码分析

冒泡排序算法的原理 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。...代码实现 /** * Created by 冲哥 on 2020.11.28 * 微信关注公众号【C语言中文社区】,免费领取200G精品学习资料 */ #include int...: 12 43 23 13 65 17 98 45 67 88 第1次循环排序后结果: 12 23 13 43 17 65 45 67 88 98 第2次循环排序后结果: 12 13 23 17 43...次循环排序后结果: 12 13 17 23 43 45 65 67 88 98 第6次循环排序后结果: 12 13 17 23 43 45 65 67 88 98 第7次循环排序后结果: 12 13 17...98 使用冒泡排序后的数据是: 12 13 17 23 43 45 65 67 88 98 图解冒泡排序 使用冒泡排序前的原始数据是:12 43 23 13 65 17 98 45 67 88 在这里只分析下一次循环的过程

56020

图解C语言冒泡排序算法,含代码分析

冒泡排序算法的原理 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。...代码实现 /** * Created by 冲哥 on 2020.11.28 * 微信关注公众号【C语言中文社区】,免费领取200G精品学习资料 */ #include int...: 12 43 23 13 65 17 98 45 67 88 第1次循环排序后结果: 12 23 13 43 17 65 45 67 88 98 第2次循环排序后结果: 12 13 23 17 43...次循环排序后结果: 12 13 17 23 43 45 65 67 88 98 第6次循环排序后结果: 12 13 17 23 43 45 65 67 88 98 第7次循环排序后结果: 12 13 17...98 使用冒泡排序后的数据是: 12 13 17 23 43 45 65 67 88 98 图解冒泡排序 使用冒泡排序前的原始数据是: 12 43 23 13 65 17 98 45 67 88 在这里只分析下一次循环的过程

78322

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,这样数据才不会被改变。 排序算法的复杂度及稳定性 稳定性:指的是相同的数,在排序之后的相对位置没有改变。

9610

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券