排序:簡單排序算法實現:冒泡,選擇,插入

package com.zf.algorithm.sort;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public final class Sort
{
	/**
	 * 排序方向,升序或者降序
	 *
	 * @author zf
	 *
	 */
	public enum ORDER
	{
		ascend(1), descend(-1);

		private ORDER(int value)
		{
			this.order = value;
		}

		private int order;

		public int getOrder()
		{
			return order;
		}
	}

	/**
	 * 簡答的冒泡排序。
	 *
	 * @param list
	 *            需要排序的數組
	 * @param order
	 *            順序
	 */
	@SuppressWarnings("unchecked")
	public static <T> void simpleBubbleSort(List<Comparable<T>> list, ORDER order)
	{
		// Check parameter
		if (list == null || list.size() == 0)
			return;

		for (int i = 0; i < list.size() - 1; i++)
		{
			for (int j = i + 1; j < list.size(); j++)
			{
				if (list.get(i).compareTo((T) list.get(j)) * order.getOrder() > 0)
				{
					Comparable<T> temp = list.get(i);
					list.set(i, list.get(j));
					list.set(j, temp);
				}
			}
		}
	}

	/**
	 * 改進的冒泡排序。
	 *
	 * @param list
	 *            需要排序的數組
	 * @param order
	 *            順序
	 */
	@SuppressWarnings("unchecked")
	public static <T> void impovedBubbleSort(List<Comparable<T>> list, ORDER order)
	{
		// Check parameter
		if (list == null || list.size() == 0)
			return;

		for (int i = 0; i < list.size(); i++)
		{
			for (int j = list.size() - 1; j > i; j--)
			{
				if (list.get(j - 1).compareTo((T) list.get(j)) * order.getOrder() > 0)
				{
					Comparable<T> temp = list.get(j);
					list.set(j, list.get(j - 1));
					list.set(j - 1, temp);
				}
			}
		}
	}

	/**
	 * 簡答的選擇排序。
	 *
	 * @param list
	 *            需要排序的數組。
	 * @param order
	 *            順序。
	 */
	@SuppressWarnings("unchecked")
	public static <T> void simpleSelectSort(List<Comparable<T>> list, ORDER order)
	{
		// Check parameter
		if (list == null || list.size() == 0)
			return;

		for (int i = 0; i < list.size() - 1; i++)
		{
			int loc = i;
			for (int j = i + 1; j < list.size(); j++)
			{
				if (list.get(loc).compareTo((T) list.get(j)) * order.getOrder() > 0)
				{
					loc = j;
				}
			}
			Comparable<T> temp = list.get(i);
			list.set(i, list.get(loc));
			list.set(loc, temp);
		}
	}

	/**
	 * 插入排序。
	 * 
	 * @param list
	 *            需要排序的數組。
	 * @param order
	 *            順序。
	 */
	@SuppressWarnings("unchecked")
	public static <T> void insertSort(List<Comparable<T>> list, ORDER order)
	{
		// Check parameter
		if (list == null || list.size() == 0)
			return;

		Object[] arrays = list.toArray();

		for (int i = 1; i < arrays.length; i++)
		{
			Comparable<T> iEle = (Comparable<T>) arrays[i];
			if (iEle.compareTo((T) arrays[i - 1]) * order.getOrder() < 0)
			{
				int j = i - 1;
				for (; j >= 0; j--)
				{
					if (iEle.compareTo((T) arrays[j]) * order.getOrder() < 0)
					{
						arrays[j + 1] = arrays[j];
					} else
					{
						break;
					}
				}
				arrays[j + 1] = iEle;
			}
		}
		list.clear();
		for (Object object : arrays)
			list.add((Comparable<T>) object);
	}

	public static void main(String[] args)
	{
		Integer[] integers =
		{ 4, 3, 7, 1, 6, 2 };
		List<Comparable<Integer>> list = new ArrayList<Comparable<Integer>>();
		list.addAll(Arrays.asList(integers));
		System.out.println("INPUT : " + list);
		// Sort.simpleBubbleSort(list, ORDER.descend);
		// Sort.impovedBubbleSort(list, ORDER.descend);
		// Sort.simpleSelectSort(list, ORDER.descend);
		Sort.insertSort(list, ORDER.ascend);
		System.out.println("OUTPUT : " + list);
	}
}


發佈了62 篇原創文章 · 獲贊 138 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章