一、冒泡排序
相邻的进行比较,大的向后移动,
public class Sort01 { /** * 进行排序 * @param a */ public static void sort(int[] 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和w谁大 * v.compareTo(w)>0,则v>w * @param v * @param w * @return */ public static boolean greater(Comparable v,Comparable w){ return v.compareTo(w)>0; } /** * 交换 */ public static void exch(int[] a,int i,int j){ int temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } }
public class SortTest { public static void main(String[] args) { int[] arr ={4,5,6,3,2,1}; Sort01.sort(arr); System.out.println(Arrays.toString(arr)); } }
二、选择排序
选择排序是:第一次在数据中找到最小的放到放到第一位,第二在数据中找除过第一个数的最小数放到第二位......以此类推;
找到最小的方法:假设第一个为最小,和其他的挨个比较;
public class Sort01 { /** * 进行排序 * @param a */ public static void sort(Comparable[] a){ for(int i =0;i<=a.length-2;i++){ for (int j=i+1;j<a.length;j++){
//比较最小索引和j索引处的值 if(greater(a[i],a[j])){ exch(a,i,j); } } } } /** * 比较v和w谁大 * v.compareTo(w)>0,则v>w * @param v * @param w * @return */ public static boolean greater(Comparable v,Comparable w){ return v.compareTo(w)>0; } /** * 交换 */ public static void exch(Comparable[] a,int i,int j){ Comparable t; t=a[i]; a[i]=a[j]; a[j]=t; } }
public class SortTest { public static void main(String[] args) { Integer[] arr ={4,5,6,3,2,1}; Sort01.sort(arr); System.out.println(Arrays.toString(arr)); } }
三、插入排序
原理:1.把所有的元素分为两组,已排序和未排序
2.找到未排序的组中的第一个元素,向已经排序的组中进行插入
3.倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,就把待插入元素放到此位置,其他元素后移
public static void sort(Comparable[] a){ for(int i=1;i<a.length;i++){ for (int j=i;j>0;j--){ if(greater(a[j-1],a[j])){ exch(a,j-1,j); }else{ break; } } } }