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