文档章节

冒泡排序

人觉非常君
 人觉非常君
发布于 06/23 18:59
字数 699
阅读 5
收藏 0

原理:比较两个相邻的元素,将值大的元素交换至右端。

思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

以下以数组【2,1,5,7,3】为例子,相邻两位数比较,若前一数字较大,则互换位置,反之,则不改变顺序

-----------第一轮相邻数字比较-------------------------------------------------------------------

2大于1 --> 顺序互换   1,2,5,7,3

2小于5 --> 顺序不变   1,2,5,7,3

5小于7 --> 顺序不变   1,2,5,7,3

7大于3 --> 顺序互换   1,2,5,3,7

-----------第二轮相邻数字比较--------------------------------------------------------------------

1小于2 --> 顺序不变   1,2,5,3,7

2小于5 --> 顺序不变   1,2,5,3,7

5大于3 --> 顺序互换   1,2,3,5,7

5小于7 --> 顺序不变   1,2,3,5,7

-----------第三轮相邻数字比较--------------------------------------------------------------------

1小于2 --> 顺序不变   1,2,3,5,7

2小于3 --> 顺序不变   1,2,3,5,7

3小于5 --> 顺序不变   1,2,3,5,7

5小于7 --> 顺序不变   1,2,3,5,7

 

以上第三轮中已经没有元素互换的操作了,说明冒泡排序已经可以结束了。

 

package com.sort.utils;
import java.util.Comparator;

/**
 * 冒泡排序工具类
 * @author huang
 *
 */
public class BubbleSortUtil {

	private BubbleSortUtil() {
		super();
	}
	
	public static <T extends Comparable<T>> void sort(T[] list) {
		if(null != list && list.length > 1) {
			int len = list.length;
			boolean isSwaped = true;
			T temp = null;
			for(int i=0;i<len && isSwaped;i++) {
				isSwaped = false;
				for(int j=0;j<len-1-i;j++) {
					if(list[j].compareTo(list[j+1]) > 0) {
						temp = list[j];
						list[j] = list[j+1];
						list[j+1] = temp;
						isSwaped = true;
					}
				}
			}
		}
	}
	
	public static <T> void sort(T[] list, Comparator<T> comparator) {
		if(null != list && list.length > 1 && null != comparator) {
			int len = list.length;
			T temp = null;
			boolean isSwaped = true;
			for(int i=0;i<len && isSwaped;i++) {
				isSwaped = false;
				for(int j=0;j<len-1-i;j++) {
					if(comparator.compare(list[j], list[j+1]) > 0) {
						temp = list[j];
						list[j] = list[j+1];
						list[j+1] = temp;
						isSwaped = true;
					}
				}
			}
		}
	}
	
}

方法是静态方法,直接通过类名调用即可。

package com.sort.bubble.test;

import java.util.Arrays;
import java.util.Comparator;

import com.sort.utils.BubbleSortUtil;

public class Ctest01 {

	public static void main(String[] args) {
		String[] stringArray = new String[] {"2","1","5","7","3"};
//		BubbleSortUtil.sort(stringArray);
		BubbleSortUtil.sort(stringArray, new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				return o1.compareTo(o2);
			}
		});
		System.out.println(Arrays.asList(stringArray).toString());
	}
}

输出结果:

© 著作权归作者所有

共有 人打赏支持
人觉非常君
粉丝 5
博文 43
码字总数 29951
作品 0
浦东
排序算法篇_冒泡排序法

image   冒泡排序法(Bubble Sort)是所有排序算法中最简单、最基本的一种。冒泡排序法的思路就是交换排序,通过相邻数据的交换来达到排序目的。 冒泡排序算法 冒泡排序算法通过多次比较和...

一笑小先生
01/28
0
0
面试 9:Java 玩转冒泡排序

面试 9:用 Java 实现冒泡排序 南尘的朋友们,新的一周好,原本打算继续讲链表考点算法的,这里姑且是卡一段。虽然在我们 Android 开发中,很少涉及到排序算法,因为基本官方都帮我们封装好了...

nanchen2251
07/16
0
0
iOS冒泡排序

冒泡排序算法顾名思义,经过每一次排序算法之后,最大的泡泡(数)会飘到最上面,第二次排序之后,第二大的泡泡(数)飘到倒数第二的位置 ..... 以此类推,直至完成从小到大的排序。 冒泡排序...

zh_iOS
02/06
0
0
数据结构/算法——冒泡排序算法*

最原始的排序方法是只取出最大的,而冒泡排序除了出去最大的,还要将相邻的2个元素的位置互换。 冒泡排序是排序算法里比较简单的算法,即循环n轮,每轮都冒出个最大的,同时相邻的2个元素的位...

cjun1990
2015/10/10
91
0
排序——冒泡排序法

一、冒泡排序法概述 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字...

翼动动空
2016/06/05
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里开源的 java 诊断工具—— Arthas

Arthas 是 阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 java 的问题进行诊断! 一、概述 这个工具可以协助你做下面这些事情: 这个类是从哪个 jar 包加载而来的? 为什么会报各...

xiaomin0322
15分钟前
0
0
去除shell read 读取的最后一个字符

# 读取管道数据cat | while read line; do echo $line # 此时 line包含 \n or \r\ndone# 去除 read 读取的特殊字符line=${line%?} # 去除最后一个字符...

tigerBin
16分钟前
0
0
Qt之listView设置编辑状态

QListView默认是可以编辑的,可以用setEditTrigers设置QListView的条目是否可以编辑,以及如何进入编辑状态。比如: ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAb...

OceanStar
16分钟前
0
0
Linux批量替换

sed -i "s/http://cache.co188.com///image.co188.com/g" grep http:\/\/image.co188.com -rl . *.html sed -i "s/http://cache.co188.com///cache.co188.com/g" grep http:\/\/cache.co188.......

cpaku
26分钟前
0
0
设置plsql永久注册码

填写注册码: Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number:601769 password:xs374ca...

小橙子的曼曼
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部