黑马程序员-几种常用排序算法

 

------- android培训java培训、期待与您交流! ----------
package com.itheima.util;

/**
 * 排序工具类
 * 
 * @author mrng
 * 
 */
public class SortUtils {
	/**
	 * 快速排序 如果调用此方法,次方法会再掉用quickSort(String[] strArr, int left, int rigth)方法
	 * left默认为0, right默认为strArr.length-1
	 * 
	 * @param strArr
	 */
	public static void quickSort(int[] arr) {
		quickSort(arr, 0, arr.length - 1);
	}

	/**
	 * 快速排序 此方法可以对数组需要排序的区间进行定制
	 * 
	 * @param strArr
	 * @param left
	 * @param right
	 */
	public static void quickSort(int[] arr, int left, int right) {
		// 数组中间的元素
		int middle = arr[(left + right) / 2];
		// 临时变量,用于交换数组元素使用
		int temp;
		// 向后搜索的指针
		int i = left;
		// 向前搜索的指针
		int j = right;

		do {
			while (arr[i] < middle && i < right)
				i++; // 找出左边比中间值大的数
			while (arr[j] > middle && j > left)
				j--; // 找出右边比中间值小的数
			if (i <= j) { // 将左边大的数和右边小的数进行交换
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;

				i++;
				j--;
			}
		} while (i <= j); // 当两个指针交错时停止

		// 将数组分开两半,确定每个数字的正确位置
		if (i < right) {
			quickSort(arr, i, right);
		}
		if (j > left) {
			quickSort(arr, left, j);
		}
	}

	/**
	 * 冒泡排序法
	 * 
	 * @param arr
	 */
	public static void BubbleSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = 0; j < arr.length - i - 1; j++) {
				if (arr[j] > arr[j + 1]) {
					arr[j] = arr[j] ^ arr[j + 1];
					arr[j + 1] = arr[j] ^ arr[j + 1];
					arr[j] = arr[j] ^ arr[j + 1];
				}
			}
		}
	}

	/**
	 * 选择排序法
	 */
	public void SelectSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[i] > arr[j]) {
					arr[i] = arr[i] ^ arr[j];
					arr[j] = arr[i] ^ arr[j];
					arr[i] = arr[i] ^ arr[j];
				}
			}
		}
	}
}

 

 ------- android培训java培训、期待与您交流! ----------

详细请查看:http://edu.csdn.net/heima/

 

你可能感兴趣的:(排序算法)