文档章节

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

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
05/24
0
0
数据结构与算法(冒泡排序与选择排序)

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

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

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

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

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

hardyyao
11/04
0
0
一个Java小白通向数据结构算法之旅(7) - 简单排序总结

前言 昨天双,什么也没买。因为没有想到什么必需的用品,何况也没有钱。身为屌丝的我,只能敲敲代码,写一写总结,岂不美滋滋哉。今天看了《五亿探长雷洛》这部电影,非常喜欢刘德华饰演的雷...

cmazxiaoma
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Node 框架接入 ELK 实践总结

我们都有过上机器查日志的经历,当集群数量增多的时候,这种原始的操作带来的低效率不仅给我们定位现网问题带来极大的挑战,同时,我们也无法对我们服务框架的各项指标进行有效的量化诊断,更...

嫣然丫丫丫
30分钟前
1
0
PostgreSQL 调用 Rust 函数内存耗用研究

开始看 PostgreSQL 的文档,以为对于那些 .so 形式的二进制扩展函数,比如用 C 语言编写的、Rust 编写的等,PG 会把它们装载到每个连接的内存里去。 因为 Rust 现在编译出来的二进制文件还比...

helloclia
30分钟前
2
0
HTTP Authorization Base64 验证

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.nio.charset.Charset;import java.util.B......

laolin23
31分钟前
1
0
Spring Cloud Finchley.SR1 的学习与应用 7 - 服务容错保护 Hystrix

Hystrix 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况,这种现象被称为服务雪崩效应。为了应对服务雪崩,一种常见的做法是手动服务降级。而 Hystrix 的出现,给我们提...

张shieppp
34分钟前
2
0
PHP利用多进程处理任务(一篇写得比较容易理解的多进程文章)

 PHP多进程一般应用在PHP_CLI命令行中执行php脚本,不要在web访问时使用。   多进程处理分解任务一般要比单进程更快。 php查看是否安装多进程模块: php -m | grep pcntl (pcntl是proce...

hansonwong
35分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部