选择、插入、冒泡排序(从小到大)

package com.wangzhu.main;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		work(new int[] { 1, 1, 1, 1, 1 });
		work(new int[] { 5, 4, 3, 2, 1 });
		work(new int[] { 1, 2, 3, 4, 5 });
		work(new int[] { 1, 7, 2, 3, 3, 4, 5, 5, 7, 8, 9, 10, 9, 8, 7, 6 });

	}

	public static void work(int[] arr) {
		insertSort(arr);
		selectSort(arr);
		bubbleSort(arr);
	}

	/**
	 * 插入排序(从小到大):在要排序的一组数中,假设前面(n-1)[n>=2]个数已经排好序,
	 * 现在要把第n个数插到前面的有序数中,使得这n个数也是排好序的。如此反复,知道全部排好序。
	 * 
	 * @param arr
	 */
	public static void insertSort(int[] arr) {
		for (int i = 1, len = arr.length, temp, j; i < len; i++) {
			temp = arr[i];
			for (j = i - 1; j >= 0 && temp < arr[j]; j--) {
				arr[j + 1] = arr[j];
			}
			arr[j + 1] = temp;
		}
		show(arr);
	}

	/**
	 * 选择排序(从小到大):在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
	 * 然后在剩下的数当中再找最小的数与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
	 * 
	 * @param arr
	 */
	public static void selectSort(int[] arr) {
		for (int i = 0, len = arr.length, k; i < len; i++) {
			k = i;
			for (int j = i + 1; j < len; j++) {
				if (arr[j] < arr[k]) {
					k = j;
				}
			}
			swap(arr, i, k);
		}
		show(arr);
	}

	/**
	 * 冒泡排序(从小到大):在要排序的一组数中,对当前还未排好序的范围内的全部数, 自上而下对相邻的两个数依次进行比较和调整,
	 * 让较大的数往下沉,较小的往上冒。 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
	 * 
	 * @param arr
	 */
	public static void bubbleSort(int[] arr) {
		for (int i = 0, len = arr.length - 1; i < len; i++) {
			for (int j = 0; j < len - i; j++) {
				if (arr[j] > arr[j + 1]) {
					swap(arr, j, j + 1);
				}
			}
		}
		show(arr);
	}

	private static void swap(int[] arr, int i, int k) {
		int temp = arr[i];
		arr[i] = arr[k];
		arr[k] = temp;
	}

	public static void show(int[] arr) {
		System.out.println("-------");
		for (int i : arr) {
			System.out.print(i + " ");
		}
		System.out.println("-------");
	}
}

 

posted @ 2012-08-01 17:13  qingyezhu  阅读(422)  评论(0)    收藏  举报