首页
学习
活动
专区
圈层
工具
发布

C++经典算法题-排序法 - 改良的气泡排序

35.Algorithm Gossip: Shaker 排序法 - 改良的气泡排序 说明 请看看之前介绍过的气泡排序法: for (i = 0; i < MAX - 1 && flag == 1; i+...number[j + 1], number[j]); flag = 1; } } } 事实上这个气泡排序法已经不是单纯的气泡排序了...,它使用了旗标与右端左移两个方法来改进排序的效能,而Shaker排序法使用到后面这个观念进一步改良气泡排序法。...解法 在上面的气泡排序法中,交换的动作并不会一直进行至阵列的最后一个,而是会进行至MAX-i- 1,所以排序的过程中,阵列右方排序好的元素会一直增加,使得左边排序的次数逐渐减少,如我们的例子所示: 排序前...方法就在于气泡排序的双向进行,先让气泡排序由左向右进行,再来让气泡排序由右往左进行, 如此完成一次排序的动作,而您必须使用left与right两个旗标来记录左右两端已排序的元素位置。

99400

C++经典算法题-选择、插入、气泡排序

33.Algorithm Gossip: 选择、插入、气泡排序 说明 选择排序(Selection sort)、插入排序(Insertion sort)与气泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式...气泡排序法 顾名思义,就是排序时,最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法, 将大的元素交换至右端,所以大的元素会不断的往右移动,直到适当的位置为止。...基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完阵列后都没有发生任何的交换动作,表示排序已经完成,而无需再进行之后的回圈比较与交换动作,例如: 排序前:95 27 90 49 80 58...在上面的例子当中,还加入了一个观念,就是当进行至i与i+1时没有交换的动作,表示接下来的 i+2至n已经排序完毕,这也增进了气泡排序的效率。...("(1)选择排序\n(2)插入排序\n(3)气泡排序\n:"); scanf("%d", &i); switch(i) { case 1:

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

    11道面试中不常见却一定会问到Python题解析

    Python没有访问访问标识如在C++中的public, private, 这就非常信任程序员的素质,相信每个程序员都是“成人”了~ 3.在Python中,函数是一等公民。...10、请用Python手写实现冒泡排序 解析: 冒泡排序的原理不难,假定要将被排序的数组R[1..n]从大到小垂直排列,每个数字R可以看作是重量为R.key的气泡。...根据轻气泡在上、重气泡在上的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,则使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上、重者在下为止。...然后将所有气泡逆序,就实现了数组从小到大的排序。 步骤: 1 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2 对第0个到第n-1个数据做同样的工作。这时,最大的数就到了数组最后的位置上。...4 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    75830

    11道面试中不常见却一定会问到Python题解析

    Python没有访问访问标识如在C++中的public, private, 这就非常信任程序员的素质,相信每个程序员都是“成人”了~ 3.在Python中,函数是一等公民。...print(a) 本题解析来源:@Tom_junsong 5、Python里面如何生成随机数解析: random模块 随机整数:random.randint(a,b):返回随机整数x,a排序 解析: 冒泡排序的原理不难,假定要将被排序的数组R[1..n]从大到小垂直排列,每个数字R可以看作是重量为R.key的气泡。...根据轻气泡在上、重气泡在上的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,则使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上、重者在下为止。...然后将所有气泡逆序,就实现了数组从小到大的排序。 步骤: 1 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2 对第0个到第n-1个数据做同样的工作。这时,最大的数就到了数组最后的位置上。

    62620

    蒜头君的随机数 【C++ 的排序与去重(sort函数与unique函数)】

    问题描述 蒜头君想在学校中请一些同学一起做一项问卷调查,为了确保实验的客观性,他先用计算机生成了n(1数字,只保留一个,把其余相同的数去掉,...第二行有n个用空格隔开的正整数,为所产生的随机数。 输出格式 第一行输出一个正整数m,表示不相同的随机数的个数。第二行输出m个用空格隔开的正整数,为从小到大排好序的不相同的随机数。...Sort函数 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。...sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include的c++标准库中。...也包含在头文件为#include的c++标准库中。 一般使用前需要对容器进行排序,这样才能实现对整个数组去重。

    1.2K20

    数组排序方法(冒泡排序)

    数组排序方法--冒泡排序法 冒泡排序是排序算法中较为简单的一种,英文名为Bubble Sort。...它遍历所有的数据,每次对相邻元素进行两两比较,如果顺序和预先规定的顺序不一致,则进行位置交换;这样一次遍历会将最大或最小的数据上浮到顶端,之后再重复同样的操作,直到所有的数据有序。...C语言冒泡排序法的排序规则: 将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。...根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 初始 R[1..n]为无序区。...扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。

    91920

    java编写冒泡排序源代码,用java实现冒泡排序算法,java冒泡算法

    扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。  ...,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。  ...若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。...在这种情况下,比较和移动次数均达到最大值:  Cmax=n(n-1)/2=O(n2)  Mmax=3n(n-1)/2=O(n2)  冒泡排序的最坏时间复杂度为O(n2)。  ...需要n-1趟扫描完成排序情况:  当只有最重的气泡位于R[1]的位置,其余的气泡均已排好序时,则仍需做n-1趟扫描才能完成排序。

    4.1K30

    Python学习的自我理解和想法(28)

    其名称的由来颇具趣味性,正如我们在日常生活中看到的气泡在液体中上浮的现象一样,在待排序的数列中,较小(或较大,取决于排序规则)的元素会如同气泡般逐渐 “浮” 到数列的合适位置,故而得名冒泡排序。...3.冒泡排序的详细工作原理 本质:让一个数字和它相邻的下一个数字进行比较运算,如果前一个数大于后一个数字,就交换两个数据的位置....然后比较 6 和 1,交换后变为 [5, 3, 1, 6, 8, 7, 2, 4]。...再比较 8 和 7,交换后变为 [5, 3, 1, 6, 7, 8, 2, 4]。接着比较 8 和 2,交换后变为 [5, 3, 1, 6, 7, 2, 8, 4]。...再比较 8 和 4,交换后第一轮排序结束,此时数列变为 [5, 3, 1, 6, 7, 2, 4, 8]。可以发现,经过第一轮的比较和交换操作,数列中的最大元素 8 已经 “浮” 到了数列的末尾。

    7600

    基础算法(二)

    至此第一趟结束,将最大的数放到了最后。...如此下去,重复以上过程,直至最终完成排序。   由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。   用二重循环实现,外循环变量设为i,内循环变量设为j。...②第1趟排序,在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。...该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。         ...寻找孤立数字         需求:给定一个数组,数组内的数两两相同,只有一个数是孤立的,用最快的方式找出这个数。

    75000

    漫画:什么是冒泡排序?

    大家一定都喝过汽水,汽水中常常有许多小小的气泡,哗啦哗啦飘到上面来。这是因为组成小气泡的二氧化碳比水要轻,所以小气泡可以一点一点向上浮动。...而我们的冒泡排序之所以叫做冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身大小,一点一点向着数组的一侧移动。 具体如何来移动呢?...这样一来,元素9作为数列的最大元素,就像是汽水里的小气泡一样漂啊漂,漂到了最右侧。 这时候,我们的冒泡排序的第一轮结束了。数列最右侧的元素9可以认为是一个有序区域,有序区域目前只有一个元素。...array[j] = array[j+1]; array[j+1] = tmp; //有元素交换,所以不是有序,标记变为...为了说明问题,咱们这次找一个新的数列: 这个数列的特点是前半部分(3,4,2,1)无序,后半部分(5,6,7,8)升序,并且后半部分的元素已经是数列最大值。

    34420

    C++017-C++冒泡排序与插入排序

    这个算法的名字由来是因为越小的元素会经由交换像气泡一样慢慢“浮”到数列的顶端。 排序规则 每次比较相邻的元素,如果第一个比第二个大,就交换他们两个。...经过一轮排序后,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。...在第二个位置插入数字6,得到有序序列{5,6}。 第二步:有序序列为{5,6}。 第三个数3开始进行插入排序。由于5,6均大于3,因此数字5、6需要往后挪一个位置。然后再将3放到第一个位置。...+学习系列,会介绍C++基础语法,基础算法与数据结构的相关内容。...本文为C++冒泡排序与插入排序案例,包括相关案例练习。

    25920

    【优选算法篇】揭秘快速排序:分治算法如何突破性能瓶颈(上篇)

    1.4.1 时间复杂度分析: 最优情况下,快速排序的时间复杂度是 O(n log n),即每次分割都能将数组对半分。 最坏情况下(例如每次都选择最小或最大元素作为基准),时间复杂度为 O(n²)。...然后通过 while 循环将每个数字按照其出现的次数填回到数组中。...计数排序:通过统计每个数字的频率来排序,时间复杂度为 O(n),空间复杂度为 O(1)(不考虑计数数组)。 两次遍历(插入排序):适用于小规模数据,空间复杂度低,但时间复杂度相对较高。...srand(time(NULL)):使用 time(NULL) 获取当前时间作为随机数生成的种子,确保每次程序运行时,随机数生成器的种子不同。...3.3 多种解法 3.3.1 解法 2:使用 C++ 内置排序 (快速排序) C++ STL 提供了非常高效的排序函数 std::sort,底层使用的是 快速排序 或 堆排序,通常会选择最适合的数据结构来实现排序

    24910

    php面试题-算法题总结篇

    (一维数组) 基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。...排序过程:设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则, 从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”漂浮”,如此反复进行,直至最后任何两个气泡都是轻者在上...} } 6、二分查找 /** 二分算法查找 @param array $array 要查找的数组 @param int $min_key 数组的最小下标 @param int $max_key 数组的最大下标...$laststr); return $str; } 14、删除一段字符串 function str_delete(str, i, for ($c=0; $c<$i; $c++){...$startstr .= $str[$c]; } for ($c=($i+$j); $c<strlen($str); $c++){ $laststr .= $str[$c]; }

    51210

    冒泡排序

    冒泡排序算法的原理总结 4. 代码 1. 前言 轮子哥曾经在知乎里讲过这么一个事,当年他毕业的时候,有一个公司(微软)来上海招聘。第一轮笔试出的算法题是冒泡排序,全场只有一半的学生写了出来。...这篇文章,就让小编带你学习一下冒泡排序吧。 ---- 2....冒泡算法 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。...冒泡排序的算法复杂度为n^2,如果不了解什么是算法复杂度,可以先看一下这篇:算法复杂度 现在通过一个动态图,让我们看一下冒泡排序的工作过程: 这个动态图演示了一个无序数组使用冒泡排序转变为一个从大到小的有序数组...在这一点,最后的元素应该会是最大的数。 [3] 针对所有的元素重复以上的步骤,除了最后一个。 [4] 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    26320

    C++ 中的随机标头系列1

    这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情 此标头引入了随机数生成功能。该库允许使用生成器和分布的组合生成随机数。 生成器:生成均匀分布的数字的对象。...分布:将生成器生成的数字序列转换为遵循特定随机变量分布(如均匀、正态或二项式)的数字序列的对象。 发电机 一、伪随机数引擎: 他们使用一种算法根据初始种子生成随机数。...max:它返回operator() 给出的最大值。 operator() :它返回一个新的随机数。...它是一个 24 位数字的减法伪随机生成器,通常用作 ranlux24 生成器的基础引擎。 operator(): 它返回一个新的随机数。...该对象在内部保留一个由 k 个生成的数字组成的缓冲区,并在请求时返回缓冲区内随机选择的数字,并将其替换为从其基本引擎获得的值。 operator(): 它返回一个新的随机数。

    2.1K10

    C语言之冒泡排序、选择排序、折半查询、进制查表

    一、冒泡排序 //1、冒泡排序 /** 一组无序数字,进行从小到大排序 冒泡排序的过程:就是每个循环从第一个元素开始,相邻两个元素进行比较,前面的比后面的大,则进行值交换;...则第一次循环把最大值排到了最后,第二次循环把第二大的值排到了倒数第二位...以此类推; 把最大值想象成最大气泡,相邻气泡进行比较,较大气泡排到后面,最大气泡先冒到最后面。。。。...: 88 18 99 6 72 开始进行冒泡排序: **** *** ** * 排序后的数组元素排序为...: 6 18 72 88 99 */ 二、选择排序 //2、选择排序 /** 一组无序数字,进行从小到达排序 选择排序的过程:和冒泡排序有点相反的是每次循环中某一个元素和数组里面所有的元素进行比较...: 11 102 99 2 82 开始进行选择排序: **** *** ** * 排序后的数组元素排序为

    2K30

    【小码匠自习室】CSP-JS复赛准备:STL复习(一)

    abs:返回x的绝对值 sin/cos/tan:三角函数 string:文字列 入门 min/max swap __gcd rand:需要确认 clock:待确认 reverse sort 参考资料 C+...、最小值 swap 值交换 __gcd 最大公约数 rand 随机数 clock 时间计数器 reverse 数组逆序配列 sort 排序 min/max 返回复数值得最大或者最小的值 程序 说明 min...(a, b) * b << endl; // 输出最小公倍数 return 0; } rand:需要确认 生成随机数 程序 说明 rand() 返回0~2-1内的随机数 srand((unsigned...)time(NULL)); 在main函数头部加上此语句,每次生成的随机数都不同 ^{31} -1内的随机数srand((unsigned)time(NULL));在main函数头部加上此语句,每次生成的随机数都不同...C++ アルゴリズム実装に使える 25 の STL 機能【前編】 https://qiita.com/e869120/items/518297c6816adb67f9a5 厳選!

    1K20
    领券