Java基础 浅谈冒泡选择 排序

“简单不先于复杂,而是在复杂之后.” —— Alan Perlis

x.jpg

序言

冒泡排序

冒泡排序是七大排序算法中较为简单的一个,它的时间复杂度为O(n^2),相较于快速排序,它的耗时较长,但是不会带来额外的空间开销(快速排序对栈的需求),因此它适用于数据量较小且对时间要求不高的业务,然而在实际使用过程中,几乎遇不到这种情况,所以冒泡排序极少被使用,但是作为一个基础的入门排序算法,他的算法思想还是十分值得我们去学习的.


这是分割线.jpg

冒泡排序核心思想

冒泡排序的思想十分简单,它是依据气泡在水中不断上浮的灵感设计出来的:每次冒泡排序都是从头到尾,依次将紧挨着的两个数进行比较,如果前者比后者大,就交换两者的位置,否则不操作,直至末尾,比如先判断第一个和第二个的数,如果第一个比第二个大,就将两者交换,再接着判断第二个和第三个,以此类推,这样就达到了将最大的数放在最后面的效果,也就是将最大的数成功放在了它正确的位置上,之后再对前面的序列重复本操作,直到所有数都找到了自己正确的位置为止(正确的位置指的是排序之后它在序列中的位置)。

这是分割线.jpg

简单的例子

例子.png

动画演示

冒泡排序.gif
这是分割线.jpg

代码


        // 冒泡排序
        //定义一个数组 包含n个元素
        int[] arr2 = {5,8,4,2,7};
       
        //定义i用于 外循环的变量
        //外层循环控制值冒泡排序比较的趟数,一共比较 数组长度(arr2.length) - 1 趟
        for (int i = 0; i < arr2.length - 1; i++) {

            //定义j用于内层循环的变量
            //内层循环控制一趟比较的次数,每比较一趟要比上一次比较的次数少1次,因为上一趟比较已经目标元素排在数组的最后一个
            for (int j = 0; j < arr2.length - i - 1; j++) {

                if (arr2[j] > arr2[j + 1]) {

                    int temp = arr2[j];
                    arr2[j] = arr2[j+1];
                    arr2[j+1] = temp;
                    //  每当 当前数组值arr2[j] 大于后面a[j+1]元素的值, 对两个值进行交换,引用间变量temp来实现两个数组值的互换
                }
            }
        }
        for (int i:arr2) {
            System.out.println(i);
        }

这是分割线.jpg

选择排序

选择排序核心思想

首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。具体做法是:选择最小的元素与未排序部分的首部交换,使得序列的前面为有序。

这是分割线.jpg

动画演示

选择排序动画演示.gif
这是分割线.jpg

代码

    int[] arr1 = {5,2,3,6,1};

       // 选择排序
       for (int i = 0; i < arr1.length - 1; i++) {

       //  第i趟 -- a[i]后所有的数据和a[i]比较
           for (int j = i + 1; j < arr1.length; j++)
           {
               //找到a[i] ~ a[length - 1中最小的数与a[i]进行交换
               if (arr1[i] > arr1[j])
               {
                   int temp = arr1[i];
                   arr1[i] = arr1[j];
                   arr1[j] = temp;
               }
           }
       }
        
     // 增强循环 类似于 iOS的 for in遍历
       for (int i:arr1)  {
           System.out.println(i);

       }


这是分割线.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,641评论 6 525
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,754评论 3 408
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 173,075评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,369评论 1 303
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,386评论 6 402
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,800评论 1 317
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,122评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,130评论 0 281
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,689评论 1 327
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,693评论 3 348
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,804评论 1 356
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,399评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,128评论 3 341
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,528评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,705评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,409评论 3 383
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,878评论 2 368

推荐阅读更多精彩内容