public class T12 { private static int[] ints = {32,311,3,4,512,3222,44,53,434,123,55}; public static void main(String[] args) { bubbleM(); }
/** * 选择排序 * 选择排序就是就是找到当前值到数组的结尾中的最小值与当前值比较,如果当前值大于最小值就和其交换位置 * 然后从此值开始又向后面进行查找,进行判断处理 * 选择排序虽然进行的查找和冒泡排序一样多N^2,但是交换的次数是很少的 * */ public static void select() { int length = ints.length; int out, in, min; for(out = 0; out < length; out ++) { min = out;//把当前值得索引赋给最小值(即,把当前值当成最小值) for(in = out + 1; in < length; in ++) {//当前值与当前值+1的后面值进行比较 if(ints[in] < ints[min]) min = in; } swap(min, out);//把最小值和当前值交换位置才能进行下一次的查询 } for(int i = 0; i < length; i ++) { System.out.println(ints[i]); } }
/** * 冒泡排序 */ public static void bubble() { for(int i = 0; i < ints.length; i ++) { for(int j = 0; j < ints.length - i - 1; j ++) { if(ints[j] > ints[j + 1]){ swap(j, j + 1); } } } for(int i = 0; i < ints.length; i ++) { System.out.println(ints[i]); } }
//or public static void bubbleM() { for(int i = 0; i < ints.length; i ++) { for(int j = 0; j < i; j ++) { if(ints[i] < ints[j]) swap(i, j); } } for(int i = 0; i < ints.length; i ++) { System.out.println(ints[i]); } }
/** * 插入排序 * 插入排序的原理就是从数组的第一个索引(第二个数)开始一个数向右移动,一个数向左移动 * 如果左边的数大于右边的数则进行交换 */ public static void insert() { int in, out;//out向右遍历,in向左遍历 for(out = 1; out < ints.length; out ++) {//从第二个数开始,因为第一个数要留给in int temp = ints[out]; in = out; while(in > 0 && ints[in - 1] >= temp) { ints[in] = ints[in - 1]; in --; } ints[in] = temp;//交换的都是有序的数 } for(int i : ints) { System.out.println(i); } }
public static void swap(int one, int two) { int temp = ints[one]; ints[one] = ints[two]; ints[two] = temp; }