算法——插入排序
插入排序:从j开始与它左侧的数据进行对比,在对比的过程中,其左侧的数据总是有序的
package com.algorithm.sort; import java.util.Scanner; /** *插入排序:下标为j的数据与它左边的数据不断比较,插入适当位置, *在j向左移动的时候,j左边的数据总是有序的 */ public class Insertion { /** * 排序代码 * @param a */ 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); } } } /** * * @param v * @param w * @return */ private static boolean less(Comparable v,Comparable w) { return v.compareTo(w) < 0; } private static void exch(Comparable[] a, int i, int j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; } /** * 打印数组 * @param a */ private static void show(Comparable[] a) { for(int i = 0; i<a.length;i++) { System.out.print(a[i] + " "); } } /** * 判断数组原始是否有序 * @param a * @return */ public static boolean isSorted(Comparable[] a) { for(int i = 1; i<a.length;i++) { if(less(a[i],a[i-1])) { return false; } } return true; } public static void main(String[] args) { // String[] a = new String[5]; // Scanner in = new Scanner(System.in); // for(int i=0;i<a.length;i++) { // a[i] = in.next(); // } String[] a = {"d","g","c","b","f","e","a"}; sort(a); System.out.println(isSorted(a)); show(a); } }
package com.algorithm.sort; /** * 插入排序,升序 */ public class InsertionTest { public static void main(String[] args) { String[] a = {"d","g","c","b","f","e","a"}; for(int i=1; i<a.length; i++) { for(int j=i; j>0; j--) { if(a[j].compareTo(a[j-1])<0) {//此处改成>,即可降序排列 String temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; } } } for(int i = 0;i<a.length;i++) { System.out.print(a[i]+" "); } } }

浙公网安备 33010602011771号