冒泡排序

原理:比較兩個相鄰的元素,將值大的元素交換至右端。java

思路:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。而後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一趟步驟,直至所有排序完成。數組

如下以數組【2,1,5,7,3】爲例子,相鄰兩位數比較,若前一數字較大,則互換位置,反之,則不改變順序ide

-----------第一輪相鄰數字比較-------------------------------------------------------------------工具

2大於1 --> 順序互換   1,2,5,7,3code

2小於5 --> 順序不變   1,2,5,7,3blog

5小於7 --> 順序不變   1,2,5,7,3排序

7大於3 --> 順序互換   1,2,5,3,7string

-----------第二輪相鄰數字比較--------------------------------------------------------------------class

1小於2 --> 順序不變   1,2,5,3,7test

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());
	}
}

輸出結果:

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息