1. import java.util.Arrays;
  2. /**
  3. * 插入排序
  4. * 选择未排序位置的数据,插入到数组已排序好的前半本部分
  5. * 遍历该部分,进行插入,然后将后继节点往后移一位
  6. */
  7. public class InsertSort {
  8. public int[] insertSort(int[] arrays){
  9. if(null == arrays){
  10. throw new NullPointerException("arrays is null");
  11. }
  12. if(!(arrays.length>0)){
  13. return arrays;
  14. }
  15. int[] sortArrays = Arrays.copyOf(arrays, arrays.length);
  16. sort(sortArrays);
  17. return sortArrays;
  18. }
  19. private void sort(int[] arrays){
  20. int len = arrays.length;
  21. //i=0的位置默认是已经排序的,因为1个数组如何比较都是有序的
  22. //故i从1开始进行插入排序
  23. for(int i = 1;i<len;i++){
  24. //拿到需要插入的值
  25. int sortNum = arrays[i];
  26. //找到需要插入的位置
  27. int insertNum = i;
  28. for(int x = 0;x<=i;x++){
  29. if(arrays[x]>sortNum){
  30. insertNum = x;
  31. break;
  32. }
  33. }
  34. //将插入位置的值与后继节点向后移1位
  35. //为插入的值腾出位置
  36. for(int j = i;j>insertNum;j--){
  37. arrays[j] = arrays[j-1];
  38. }
  39. //进行值的插入
  40. arrays[insertNum] = sortNum;
  41. }
  42. }
  43. public void println(int [] a) {
  44. for(int x:a) {
  45. System.out.print(" "+x);
  46. }
  47. System.out.println("");
  48. }
  49. public static void main(String[] args) {
  50. int [] array = {9,3,4,12,8,5,6,2,0,11};
  51. InsertSort insertSort = new InsertSort();
  52. insertSort.println(array);
  53. insertSort.println(insertSort.insertSort(array));
  54. }
  55. }

优化:二分插入排序