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