Java温故而知新-冒泡法排序
冒泡法排序是各种初学者在学习数组与循环结构时都会练习的一种简单排序算法。
冒泡法的精髓在于比较相邻的两个元素,较大的元素会不断的排到队伍后面去,就像水里的泡泡一样不断向上跑。
想像一下倒在一个透明玻璃杯中的雪碧,杯底有很多个气泡,很多气泡同时向上升,现在我们抽象一下,假设气泡只能一个一个的向上升,那么所有气泡上升的过程就是排序的过程,实际上这样讲并不严谨。下面是一个例子。
先定义一个数组。预期排序后从小到大排列。
int[] arr = {9,6,8,2,7,1,5}; 里面的有7个元素 第一趟的排序后结果是 6 8 2 7 1 5 9
第二趟的排序后结果是 6 2 7 1 5 8 9
最后排序后的结果就是1 2 5 6 7 8 9
上面讲的很简略,也是大部分网上的教程所写的形式,有些天资超群的人一看就懂,但我们这些天赋更加超群的人还是需要看看更详细的分析。
第一趟排序中,是分几个小步完成的:
1、9和6作比较,9大,交换位置,序列变成 6982715
2、9和8做比较,9大,交换位置,序列变成 6892715
3、9和2作比较,9大,交换位置,序列变成 6829715
4、9和7作比较,9大,交换位置,序列变成 6827915
5、9和1作比较,9大,交换位置,序列变成 6827195
6、9和1作比较,9大,交换位置,序列变成 6827159
这样一趟下来就第一趟的排序后结果是 6 8 2 7 1 5 9,注意哦,这一趟我们排了6次。
第二趟也是这样排下来的:
1、6和8作比较,8大,不换位置,序列还是 6827159
2、8和2作比较,8大,交换位置,序列变成 6287159
3、8和7作比较,8大,交换位置,序列变成 6278159
4、8和1作比较,8大,交换位置,序列变成 6271859
5、8和5作比较,8大,交换位置,序列变成 6271589
这里8和9需不需要再比较呢,刚学的时候会有疑问,仔细想一想第一趟中,8和9已经比较过了,如果9和8的关系不确定,那么9就不会跑到最后面去了。所以这里不用再去比较最后的9和8了。实际上可以引入有序区和无序区的概念,每趟排序都会排出一个无序区中一个最大的数出来放到有序区去,那么有序区中的元素在放入的时候需不需要再排序呢,其实是不用的,你在构成有序区的时候已经默认了有序区第一个元素是最大的,第二个到有序区的元素是整个数组中第二大的,以此类推。注意哦,这一趟我们排了5次。
后面的几趟排序下来都可以用类似的方法去排下来。
那么如何在编码中实现呢?
整个排序分为两层,外层要控制排序的趟数,而且和序列的长度相关,仔细观察一下不难发现是序列长度-1。
伪代码
for(){
}
内层要做的是1控制该趟的比较次数,这个次数和第几趟有关;2比较相邻的两个元素,如果符合条件,就交换两个元素的位置,然后下一次比较就是往后面一位的相邻两元素。
伪代码
for(){
for(){
if(){//如果符合条件
//交换元素
}
}
}
下面放源码
package com.chapter.five;
//需求 给入一个数组,输出一个从小到大排序好的数组,要求使用冒泡法
//思路
//冒泡法的精髓在于比较相邻的两个元素,较大的元素会不断的排到队伍后面去,就像水里的泡泡一样不断向上跑。
//1n个元素就要遍历n-1次,外层用一个for循环做
//2内层需要进行比较相邻的元素,如果符合第i个元素大于第i+1个元素,
//3就交换两元素的位置,然后比较下一对元素,也就是i+1和i+2之间(这里的i+1已经是换位过的较大数)的关系,
//这样就可以将较大的数不断的向后排出来
class BubbleSort{
public static void main(String[] args){
int[] arr = {9,6,8,2,7,1,5};
BubbleSort bs = new BubbleSort();
bs.bubbleSort(arr);
}
void bubbleSort(int[] arr){
System.out.println("排序前的数组是");
for(int i:arr){
System.out.print(i+" ");
}
for(int i = 0;i < arr.length;i++){//定量,冒泡一共进行多少次,实际上应该是长度减1次
for(int j = 1;j < arr.length-i;j++){//因为进行了i次排序时,后面的第i位已经是有序的了,所以是长度减1
if(arr[j-1] > arr[j] ){//如果符合条件就交换位置,不符合就不交换
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("排序后的数组是");
for(int i:arr){
System.out.print(i+" ");
}
}
}
Java温故而知新-冒泡法排序的更多相关文章
- Java - 双冒泡法排序
最开始的代码 我采用的是我原来进行快速排序所用的方法,一直做不出来. 为什么我会采用原来快速排序的方法?因为我的记忆中好像就是这样的,因此我根据记忆中的快速排序在进行改变,然而,却无法真正的写出双冒泡 ...
- 【Java基础】选择排序、冒泡法排序、二分法查找
1.选择排序: //改进后的选择排序,减少交换的次数 public static void sortSelect(int arr[]) { //用于存放最小数的下标 int s; for (int i ...
- [python,2018-01-15] 冒泡法排序
想写一个冒泡法排序,没什么思路,就先写了个java的 public static void main(String[] args) { int array[] = {88,2,43,12,34,8,6 ...
- 8. 冒泡法排序和快速排序(基于openCV)
一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分 ...
- Python 冒泡法排序
def sequence(disorder='', separators=''): arrays = disorder.split(separators) def desc(): for i in r ...
- C#冒泡法排序源码
如下内容内容是关于C#冒泡法排序的内容,应该对码农有一些用途. int[] myArray = new int[] { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; for( int j ...
- C语言 · 冒泡法排序
算法提高 冒泡法排序 时间限制:1.0s 内存限制:512.0MB 输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以内. 样例输入 1 3 6 8 2 7 ...
- C程序数组算法 — 冒泡法排序【前冒 || 后冒】
第一种写法(前冒泡): /* C程序数组算法 - 冒泡法排序 * 此例子按照 大 -> 小 排序 * 原理:两两相比较,然后进行大小对调 * 比较次数: n^2 次 * 说明:冒泡排序是相对稳定 ...
- 冒泡法排序_c++实现
看完了郝斌老师的c语言视频,冒泡法排序,就试着写了.我觉得学习算法最重要的不是代码,而是它的原理. 代码: /** 2 * Copyright (c) 1991 - 2016 Arvin Tang. ...
随机推荐
- IDEA 单元测试testng入门及testng.xml
直接进入正题: 1.TestNG的运行方式如下: With a testng.xml file 直接run as test suite With ant 使用ant From the command ...
- GetConsoleScreenBufferInfo 函数--获取控制台屏幕缓冲区信息
GetConsoleScreenBufferInfo函数 来源:https://msdn.microsoft.com/en-us/library/ms683171(v=vs.85).aspx 作用 获 ...
- Web Service--第一次接触web service
Web Service 首发于开源中国 1. 背景 中国移动短信网关需求,要能够发送短信.开发材料只有一个短信发送配置:包括ID,password,code,url.一个jar包还有一个老旧的html ...
- 【python】字符排序
一.摘要 最近在做一个排序的东西,被python的字符串编码格式折腾了一会儿,总结下 二.排序 英文排序不用说,sort sorted 比较好,内部已经实现 主要是中文,方法是查表获取拼音再进行排序. ...
- python中list总结
转自python中list总结 一.list可以看做是一个数据结构,也是一个class, 用help(list)可以看见其方法,元素的增删改查都有各种现成的方法, 二.list操作包含以下函数:1.c ...
- python 一个包中的文件调用另外一个包文件 实例
python不同文件夹中模块的引用调用顺序,被调用的模块中①有类的 模块.类().方法() ②无类的:模块.方法() test包中testIm.py 调用 test1包中testIm1.py中的方 ...
- 使用jquery获取url及url参数的方法
使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javasc ...
- CODE大全告诉你java是否开始没落了
CODE大全告诉你java是否开始没落了! 22 岁,对于一个技术人来说可谓正当壮年.但对于一门编程语言来说,情况可能又有不同.各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Jav ...
- LoadRunner入门(二)
三.设计场景 1.打开Controller 2.选择运行的脚本 3.场景设置 3.1修改场景模式 点击scenario-convert- 修改场景百分比模式 (1)Group Name:脚本名称 (2 ...
- 6.linux下部署 web 项目
安装java 1.下载 linux 环境的jdk 2.上传该压缩包到 linux 系统中并且解压 tar -zxvf 压缩包名 3.配置环境变量并且刷新配置 export JAVA_HOME=/ali ...