文档章节

数据结构与算法学习-简单排序算法之冒泡排序与选择排序

freedwang
 freedwang
发布于 2016/04/06 16:21
字数 822
阅读 35
收藏 0

一直觉得自己底层的数据结构与算法很差,现在开始抽时间慢慢的学习,慢慢累积知识。刚看了简单的冒泡排序与选择排序,就顺便练练手写下来了。

1.冒泡排序

冒泡排序应该是最简单、最基础的排序了。原理也很简单:假设有长度为N的int数组,数组索引从0至N-1,从数组的最左端开始,比较位置0和位置1的大小,如果位置0的数大,则交换两个位置,否则什么都不做。然后右移一个位置,比较位置1和位置2的大小,同样的办法比较,如果位置1大,则继续交换位置。就按这样的方式一直比较下去,第一轮循环走完之后最大数就已经出来了,这时在数组的N-1位置上。按照同样的方法再遍历数组,第二大的数就出现在N-2的位置上了。就这样的比较下去,最终一个有序的数组就出来啦。可能讲的不好,直接上个书上看的截图,截图是说得身高,都是一个意思。

QQ图片20160406160427

再上写的demo:

package com.freedwang.study.sort;

/**
 * 冒泡排序
 * Created by wangfei on 2016/4/6.
 */
public class BubbleSort {
    private static int[] data = {1,3,6,9,2,4,15,12,18,19,14,11};

    public static void sort() {
        for (int i=0; i<data.length-1; i++) {
            for (int j=0; j<data.length-1-i; j++) {
                if (data[j] > data[j+1]) {
                    int temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                }
            }
        }
    }

    public static void display() {
        for (int i : data) {
            System.out.println(i);
        }
    }

    public static void main(String[] args) {
        sort();
        display();
    }

}

2.选择排序

原理也比较简单:假设有长度为N的int数组,数组索引从0至N-1,从数组的最左端位置0开始,从位置1开始至数组的末端找到最小的值,记下这个值或者索引,然后拿这个值和位置0的值做比较,大于位置0的值则与位置0交换位置,此时最左边的就是整个数组最小的值了。再拿位置1的值与位置2至数组末端的最小值比较,如果比位置1小则交换位置,此时位置1就是数组第二小的值了,以此类推,最终又是一个有序的数组了。说的不明白再上图:

 QQ图片20160406161714

再上代码demo:

package com.freedwang.study.sort;

/**
 * 选择排序
 * Created by wangfei on 2016/4/6.
 */
public class SelectSort {
    private static int[] data = {1,3,6,9,2,4,15,12,18,19,14,11};

    public static void sort() {
        for (int i=0; i<data.length-1; i++) {
            int min = i;
            for (int j=i+1; j<data.length; j++) {
                if (data[j] < data[min]) {
                    min = j;
                }
            }
            if (min != i) {
                int temp = data[min];
                data[min] = data[i];
                data[i] = temp;
            }
        }
    }

    public static void display() {
        for (int i : data) {
            System.out.println(i);
        }
    }

    public static void main(String[] args) {
        sort();
        display();
    }
}
小结:
技术是一个慢慢积累的过程,监督自己学习,慢慢进步,加油!代码不敢保证正确性哈,写的不对的请指教,开源中国的第一篇博客出来了。继续搬砖!!!

© 著作权归作者所有

共有 人打赏支持
freedwang
粉丝 0
博文 2
码字总数 1358
作品 0
昌平
私信 提问
六种排序算法的JavaScript实现以及总结

最近几天在系统的复习排序算法,之前都没有系统性的学习过,也没有留下过什么笔记,所以很快就忘了,这次好好地学习一下。 首先说明为了减少限制,以下代码通通运行于Node V8引擎而非浏览器,...

DM.Zhong
2018/05/24
0
0
数据结构与算法(冒泡排序与选择排序)

1.冒泡排序 冒泡排序是一种简单的排序算法,它重复的遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换,遍历数列的工作是重复的进行直到没有需要交换的元素。 冒泡排序算...

墨痕hz
2018/06/06
0
0
Java数据结构与算法(第三章简单排序)

如何排序? 这一章中主要是三个比较简单的算法:冒泡排序、选择排序和插入排序。计算机程序不能像人一样通览所有的数据。它只能根据计算机的“比较”操作原理,在同一时间内对来个数据项进行...

小风89
2015/10/22
142
0
排序(上):冒泡排序、插入排序和选择排序

如何分析一个排序算法? 分析一个排序算法的三要素:排序算法的执行效率、排序算法的内存消耗以及排序算法的稳定性。 排序算法的执行效率 对于排序算法执行效率的分析,一般是从以下三个方面...

hardyyao
2018/11/04
0
0
算法基础:五大排序算法Python实战教程

本文为 AI 研习社编译的技术博客,原标题 : A tour of the top 5 sorting algorithms with Python code 作者 | George Seif 翻译 | 邓普斯•杰弗 校对 | shunshun 整理 | 菠萝妹 原文链接:...

雷锋字幕组
01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

全面理解Java内存模型(JMM)及volatile关键字

理解Java内存区域与Java内存模型 Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的...

亭子happy
3分钟前
0
0
Prometheus监控mysql实例--centos7安装mysql_exporter

目录 概述 环境准备 普罗米修斯简介 mysql安装 mysqld_exporter安装 启动参数列表 概述 prometheus(普罗米修斯) 是一个开源系统监控和报警工具包,许多公司和组织都采用了Prometheus,该项目...

java_龙
9分钟前
3
0
拥有2000家门店,他如何晋升为服装界的新宠?

摘要: —— iwarm3.0加热组件、碳纳米管膜炎、管状石墨结构体...你看到并不是一款高科技电子产品,这是快鱼服饰在这个冬天推出的黑科技产品 - 智能温控羽绒服。 在竞争激烈的服装行业,快鱼...

阿里云云栖社区
11分钟前
0
0
不忘初心 砥砺前行-智和信通2018年年会报道

1月18日,智和信通以“不忘初心 砥砺前行”为主题的2018总结会议暨2019年年会在京召开。年会以总经理李少龙的讲话为开场,充分肯定了全体员工2018年的工作和成绩,并表达了公司产品智和网管平...

智和网管平台
19分钟前
0
0
NGINX api网关

以谁为师
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部