利用Java实现选择排序
import java.util.Random; /** *算法思想:每次在数组中寻找最小的元素,使其与当前未经过排序的第一个元素进行交换,直至所有的元素都有序。 *算法需要比较的次数:n(n-1)/2,交换的总次数为n *算法的效率分析:最坏时间复杂度 O(n^2) 平均时间复杂度O(n^2) 最好情况O(n^2) 空间复杂度O(1) *稳定性:否 *算法特点:1.运行的时间和输入状态无关 2.数据移动次数是最少的 * */ public class Selection { //排序算法 public static void sort(Comparable[] a){ for(int i=0;i<a.length;i++) for (int j=i+1;j<a.length;j++){ int min=i; if(less(a[j],a[min])) min=j; if(i!=min) exch(a,i,min); } } //判断两个元素大小的方法 private static boolean less(Comparable v,Comparable w){ return v.compareTo(w)<0; } //交换方法 private static void exch(Comparable[] a, int i, int j){ Comparable temp=a[i]; a[i]=a[j]; a[j]=temp; } //显示方法 public static void show(Comparable []a){ for(int i=0;i<a.length;i++) System.out.printf("%3d",a[i]); System.out.println(); } //加入断言 判断是否使已经有序 public boolean isSorted(Comparable []a){ for(int i=1;i<a.length;i++) if(less(a[i],a[i-1])) return false; return true; } } //设置测试用例 class Test{ public static void main(String[] args) { int N=10; Comparable[] a=new Comparable[N]; Random random=new Random(); for(int i=0;i<N;i++) a[i]=random.nextInt(100); for(int i=0;i<N;i++) System.out.printf("%3d",a[i]); System.out.println(); Selection.sort(a); Selection.show(a); } }
插入排序Java实现(与上面一致的方法在下面不一一列举)
/** * 算法思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中。 * 时间效率:在排序的过程中,向有序字表中逐个的插入元素的操作进行了n-1趟 * 算法的效率分析:最坏时间复杂度 O(n^2) 平均时间复杂度O(n^2) 最好情况O(n) 空间复杂度O(1) * 稳定性:是 * 算法特点:运行的时间和输入状态有关(若需要比较的数组时完全逆序,那么则时最坏情况;若是已经排好顺序, * 则是最好情况) * */ public class Insertion { public static void sort(Comparable[] a){ int N=a.length; for (int i=1;i<N;i++){ for(int j=i;j>0&&less(a[j],a[j-1]);j--)//找到合适的插入位置 exch(a,j,j-1); } } }