✊不积跬步,无以至千里;不积小流,无以成江海。

一、简单排序

1、冒泡排序

  1. /**
  2. ** 比较相邻的元素;若前一个大于后一个,则交换元素位置
  3. ** 外循环控制冒泡次数,内循环控制每次冒泡的元素比较个数
  4. ** 时间复杂度O(n^2)
  5. **/
  6. public class Bubble{
  7. // 对数组内的元素进行排序
  8. public static void sort(Comparable[] a){
  9. for(int i=a.length-1; i>0; i--){
  10. for(int j=0; j<i; j++){
  11. if(greater(a[j], a[j+1])){
  12. exch(a, j, j+1);
  13. }
  14. }
  15. }
  16. }
  17. // 判断v是否大于w
  18. public static boolean greater(Comparable v, Comparable w){
  19. return v.compareTo(w) > 0;
  20. }
  21. // 交换a数组中索引i和索引j处的值
  22. public static void exch(Comparable[] a, int i, int j){
  23. Comparable temp;
  24. temp = a[i];
  25. a[i] = a[j];
  26. a[j] = temp;
  27. }
  28. }

2、选择排序

  1. /**
  2. ** 假定第一个索引处的元素为最小值,然后依次和其他索引处的值进行比较,若当前索引处的值大于
  3. ** 后面的索引处的值,则重新赋最小索引,并交换该两个元素的位置
  4. ** 外循环控制选择次数,内循环控制每次选择的元素比较个数
  5. ** 时间复杂度O(n^2)
  6. **/
  7. public class Selection {
  8. // 依次比较较小值的索引值,若存在则交换位置
  9. public static void sort(Comparable[] a){
  10. for (int i=0; i<a.length-1; i++){
  11. int minIndex = i;
  12. // 找到最小元素的索引值
  13. for (int j=i+1; j< a.length; j++){
  14. if (greater(a[minIndex],a[j])){
  15. minIndex = j;
  16. }
  17. }
  18. // 交换最小元素的位置
  19. exch(a,i,minIndex);
  20. }
  21. }
  22. public static boolean greater(Comparable v, Comparable w){
  23. return v.compareTo(w) > 0;
  24. }
  25. public static void exch(Comparable[] a, int i, int j){
  26. Comparable temp;
  27. temp = a[i];
  28. a[i] = a[j];
  29. a[j] = temp;
  30. }
  31. }

3、插入排序