冒泡排序

动画 | 什么是冒泡排序?

亡梦爱人 提交于 2020-01-12 14:51:37
冒泡排序 冒牌排序算法时间复杂度最坏的情况是,最好的,说明冒泡排序是可以优化的,就看你有没有去发现。 冒泡排序算法的过程是两个元素比较的大小,是典型的交换排序算法。快速排序算法和鸡尾酒排序算法也属于交换排序。我这篇介绍完之后下一篇章会介绍快速排序和鸡尾酒排序。所以要自己学会关注哦,给这个公众号标上星标,不会迷失下一篇好文。 排序方法 比较相邻的元素,判断是否符合要求,如果不符合就交换位置来达到排序的目的。 对每一对相邻元素做相同的工作,从开始第一对到结尾的最后一对,一次遍历之后,最后一个元素是最大(小)的数。 第二次遍历重复以上操作,因为最后一个元素已经确定位置,减少一次计算。以此类推。 示例 通过一个示例来理解基本的冒泡排序算法,假设当前我们有一个数组a,里面元素是:5,6,1,7,2,4,3 初始状态 视频动画 Code Result 初始状态[5, 6, 1, 7, 2, 4, 3] 发生交换[5, 1, 6, 7, 2, 4, 3] 发生交换[5, 1, 6, 2, 7, 4, 3] 发生交换[5, 1, 6, 2, 4, 7, 3] 发生交换[5, 1, 6, 2, 4, 3, 7] 1次遍历:[5, 1, 6, 2, 4, 3, 7] 发生交换[1, 5, 6, 2, 4, 3, 7] 发生交换[1, 5, 2, 6, 4, 3, 7] 发生交换[1, 5, 2, 4,

排序算法

♀尐吖头ヾ 提交于 2020-01-10 20:52:23
第一章 冒泡排序 知识点-- 冒泡排序 3.讲解 3.1冒泡排序概述 一种排序的方式,每轮比较都从第一个元素(索引为0的元素),相邻的2个元素进行比较,只要前面元素比后面元素大就交换,依次对所有的数据进行操作,直至所有数据按要求完成排序 如果有n个数据进行排序,总共需要比较n-1轮 每一轮比较完毕,下一轮的比较就会少一个数据参与 3.2冒泡排序图解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z7UFMFQj-1578491896997)(img/5.png)] 3.3冒泡排序代码实现 /* 冒泡排序: 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面, 依次对所有的数据进行操作,直至所有数据按要求完成排序 */ public class ArrayDemo { public static void main ( String [ ] args ) { //定义一个数组 int [ ] arr = { 7 , 6 , 5 , 4 , 3 } ; System . out . println ( "排序前:" + Arrays . toString ( arr ) ) ; // 这里减1,是控制每轮比较的次数 for ( int x = 0 ; x < arr . length - 1 ; x ++ ) { //

排序算法

馋奶兔 提交于 2020-01-10 20:12:23
第一章 冒泡排序 知识点-- 冒泡排序 3.讲解 3.1冒泡排序概述 一种排序的方式,每轮比较都从第一个元素(索引为0的元素),相邻的2个元素进行比较,只要前面元素比后面元素大就交换,依次对所有的数据进行操作,直至所有数据按要求完成排序 如果有n个数据进行排序,总共需要比较n-1轮 每一轮比较完毕,下一轮的比较就会少一个数据参与 3.2冒泡排序图解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z7UFMFQj-1578491896997)(img/5.png)] 3.3冒泡排序代码实现 /* 冒泡排序: 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面, 依次对所有的数据进行操作,直至所有数据按要求完成排序 */ public class ArrayDemo { public static void main ( String [ ] args ) { //定义一个数组 int [ ] arr = { 7 , 6 , 5 , 4 , 3 } ; System . out . println ( "排序前:" + Arrays . toString ( arr ) ) ; // 这里减1,是控制每轮比较的次数 for ( int x = 0 ; x < arr . length - 1 ; x ++ ) { //

排序算法

爷,独闯天下 提交于 2020-01-10 14:19:49
第一章 冒泡排序 知识点-- 冒泡排序 3.讲解 3.1冒泡排序概述 一种排序的方式,每轮比较都从第一个元素(索引为0的元素),相邻的2个元素进行比较,只要前面元素比后面元素大就交换,依次对所有的数据进行操作,直至所有数据按要求完成排序 如果有n个数据进行排序,总共需要比较n-1轮 每一轮比较完毕,下一轮的比较就会少一个数据参与 3.2冒泡排序图解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z7UFMFQj-1578491896997)(img/5.png)] 3.3冒泡排序代码实现 /* 冒泡排序: 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面, 依次对所有的数据进行操作,直至所有数据按要求完成排序 */ public class ArrayDemo { public static void main ( String [ ] args ) { //定义一个数组 int [ ] arr = { 7 , 6 , 5 , 4 , 3 } ; System . out . println ( "排序前:" + Arrays . toString ( arr ) ) ; // 这里减1,是控制每轮比较的次数 for ( int x = 0 ; x < arr . length - 1 ; x ++ ) { //

数据结构:冒泡排序(bubble sort)

社会主义新天地 提交于 2020-01-10 08:30:45
public class BubbleSort { public static void main(String[] args) { int[] arr = {3,9,-1,10,20}; bubbleSort(arr); for (int i = 0; i < arr.length; i++) { System.out.printf(arr[i]+" "); } } static void bubbleSort(int[] arr){ for (int i = 0; i < arr.length-1; i++) { boolean isChange = false; for (int j = 0; j < arr.length-i-1; j++) { if(arr[j] > arr[j+1]){ int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; isChange = true; } } if(!isChange){ break; } } } } 来源: CSDN 作者: 请叫我大虾 链接: https://blog.csdn.net/m0_37564426/article/details/103846422

冒泡排序

岁酱吖の 提交于 2020-01-06 17:50:24
1.思想 把数组按照从小到大的方式进行排序,冒泡排序就是进行两个 相邻 的数进行比较的过程,以13 46 23 29 48 47 19 26为例 根据实例可知,该序列经过五趟比较后,就是有序的了。 2.代码(Java为例) /** * @ClassName BubbleSort * @Description 冒泡排序 * @Author Kurong * @Date 2019/12/21 15:38 * @Version 1.0 */ public class BubbleSort { public static void main ( String [ ] args ) { int [ ] nums = { 13 , 46 , 23 , 29 , 48 , 47 , 19 , 26 } ; bubbleSort ( nums ) ; print ( nums ) ; } /** * 冒泡排序 * @param nums */ public static void bubbleSort ( int [ ] nums ) { // n个数进行排序只需经过n-1趟 for ( int i = 0 ; i < nums . length - 1 ; i ++ ) { // 已经调整到最后的元素不需要再进行比较了 for ( int j = 0 ; j < nums . length -

经典的冒泡排序——————黑暗总会过去,黎明终会到来!

£可爱£侵袭症+ 提交于 2020-01-06 15:18:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> // 原理:每次两个数进行比较,从数组的前两个元素开始,如果前面的数 > 后面的数,就交换 第一轮会求出一个最大值,并且放在最后面, 然后 依此类推,经过最多N-1轮,排序完成。 ///////bubble_sort.c/// #include<stdio.h> #define N 5 int main(int argc, const char *argv[]) { int a[N]; int temp;//临时的中间变量 int i,j; printf("请输入%d个数值:\n",N); for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<N-1;i++)//外循环控制比较轮次,n个数比较n-1轮. { for(j=0;j<N-1-i;j++)//内循环n个数两两比较,比较n-1-i次. { if(a[j]>a[j+1])//前一个数大于后一个数交换 { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } /* //利用做差思想,不借助中间变量交换值 a[j]=a[j]-a[j+1];//保留差值 a[j+1]=a[j+1]+a[j];//加差值 a[j]=a[j+1]-a[j];//减差值 //若不懂可以举例a=10;b=3

冒泡排序加图解

混江龙づ霸主 提交于 2020-01-04 00:54:16
/* 冒泡排序 */ class SortDemo{ public static void main(String[] args){ int[] arr = {2,12,3,13,20,11,32,33}; //调用冒泡排序方法 printSort(arr); } //冒泡排序 public static void printSort(int[] arr){ for(int i =0;i<arr.length-1;i++){ //循环次数 for(int j = 0;j<arr.length-i-1;j++){//最大值依次往后排 if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(int k=0;k<arr.length;k++){ System.out.print(arr[k]+"\t"); } } } 来源: 51CTO 作者: qq5e01e21075ea4 链接: https://blog.51cto.com/14651315/2464210

java数据结构之排序

不想你离开。 提交于 2020-01-03 05:05:04
写在前面的话:本篇文章是我自己阅读程杰老师的大话数据结构之后自己所做的总结,网上有很多关于排序的详细介绍,我推荐 伍迷家园 所写的文章,介绍的非常详细。 排序是我们在程序中经常要用到的一种算法,好的排序可以极大的提高我们的工作效率,本篇主要介绍几种常见的排序算法; (简单说明: 下面的java程序是用来排序的,其中sum为排序数组,sum[0]不进行排序,只作为哨兵或者临时变量) 1、冒泡排序: 冒泡排序是一种交换排序,其的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。 1 //冒泡排序2 最正宗的冒泡排序,i每循环一次,最小的数就像气泡一样慢慢浮到水面上 2 public static void BubbleSort_2(int[] num){ 3 for(int i = 1; i < num.length; i++){ 4 for(int j = num.length-1; j > i; j--){ 5 if(num[j-1] > num[j]){ 6 Swap(num,j-1,j); //交换函数 交换num[j-1]和num[j]的值 7 } 8 } 9 } 10 } 2、选择排序: 简单选择排序法(Simple Selection Sort)就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1≤i≤n

排序算法汇总

删除回忆录丶 提交于 2020-01-03 05:02:57
1.排序算法简要比较 名称 数据对象 稳定性 时间复杂度 空间复杂度 描述 平均 最坏 插入排序 数组、链表 √ O(1) (有序区,无序区)。把无序区的第一个元素插入到有序区的合适的位置。对数组:比较得少,换得多。 直接选择排序 数组 × O(1) (有序区,无序区)。在无序区里找一个最小的元素跟在有序区的后面。 对数组:比较得多,换得少。 链表 √ 堆排序 数组 × O(nlogn) O(1) (最大堆,有序区)。从堆顶把根卸出来放在有序区之前,再恢复堆。 归并排序 数组、链表 √ O(nlogn) O(n) +O(logn) , 如果不是从下到上 把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行。 快速排序 数组 × O(nlogn) O(logn) ,O(n) (小数,枢纽元,大数)。 Accum qsort 链表 √ O(nlogn) O(logn) ,O(n) (无序区,有序区)。把无序区分为(小数,枢纽元,大数),从后到前压入有序区。 决策树排序 √ O(logn!) O(n!) O(n) <O(logn!) <O(nlogn) 计数排序 数组、链表 √ O(n) O(n+m) 统计小于等于该元素值的元素的个数 i,于是该元素就放在目标数组的索引 i位。(i≥0) 桶排序 数组、链表 √ O(n) O(m) 将值为 i 的元素放入i