冒泡排序

原创
2018/06/23 18:59
阅读数 85

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

思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第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());
	}
}

输出结果:

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部