✊不积跬步,无以至千里;不积小流,无以成江海。
一、简单排序
1、冒泡排序
/**** 比较相邻的元素;若前一个大于后一个,则交换元素位置** 外循环控制冒泡次数,内循环控制每次冒泡的元素比较个数** 时间复杂度O(n^2)**/public class Bubble{// 对数组内的元素进行排序public static void sort(Comparable[] a){for(int i=a.length-1; i>0; i--){for(int j=0; j<i; j++){if(greater(a[j], a[j+1])){exch(a, j, j+1);}}}}// 判断v是否大于wpublic static boolean greater(Comparable v, Comparable w){return v.compareTo(w) > 0;}// 交换a数组中索引i和索引j处的值public static void exch(Comparable[] a, int i, int j){Comparable temp;temp = a[i];a[i] = a[j];a[j] = temp;}}
2、选择排序
/**** 假定第一个索引处的元素为最小值,然后依次和其他索引处的值进行比较,若当前索引处的值大于** 后面的索引处的值,则重新赋最小索引,并交换该两个元素的位置** 外循环控制选择次数,内循环控制每次选择的元素比较个数** 时间复杂度O(n^2)**/public class Selection {// 依次比较较小值的索引值,若存在则交换位置public static void sort(Comparable[] a){for (int i=0; i<a.length-1; i++){int minIndex = i;// 找到最小元素的索引值for (int j=i+1; j< a.length; j++){if (greater(a[minIndex],a[j])){minIndex = j;}}// 交换最小元素的位置exch(a,i,minIndex);}}public static boolean greater(Comparable v, Comparable w){return v.compareTo(w) > 0;}public static void exch(Comparable[] a, int i, int j){Comparable temp;temp = a[i];a[i] = a[j];a[j] = temp;}}
3、插入排序
