个人随笔
目录
Java实现九种排序算法1:插入排序之直接插入排序
2020-04-12 23:59:37

一、插入排序

思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置,直到全部插入排序完为止。

关键问题:在前面已经排好序的序列中找到合适的插入位置。

方法:直接插入排序、二分插入排序、希尔排序

二、直接插入排序

基本思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。

java实现

  1. public class ZhiJieChaRu {
  2. /**
  3. * 直接插入排序第一版
  4. * @param a
  5. * @return
  6. */
  7. public static int[] sort1(int[] a) {
  8. //假设第一个记录为已经待排序好的记录,那么要比较a.length-1个记录,所以外层循环是a.length-1次
  9. //这里可以直接i=1从第二位开始处理也一样
  10. for(int i=1;i<a.length;i++) {
  11. //跟前面已排序的记录做对比,找到合适的位置,建议从后往前面比,若是比最后一位小,则向前移动一位,否则就直接找到该位置
  12. for(int j=i-1;j>=0;j--) {
  13. //如果当前待排序的数比这一个排序的数大,则跳出循环,否则交换位置
  14. if(a[j+1]>a[j]) {
  15. break;
  16. }else {
  17. //这种每次比较后都马上移动,每次都定义临时变量,我们其实可以找到位置,最后再出入一次即可
  18. int temp = a[j+1];
  19. a[j+1]=a[j];
  20. a[j]=temp;
  21. }
  22. }
  23. }
  24. return a;
  25. }
  26. /**
  27. * 插入排序改进版,找到位置最后才插入
  28. * @param a
  29. * @return
  30. */
  31. public static int[] sort2(int[] a) {
  32. //假设第一个记录为已经待排序好的记录,那么要比较a.length-1个记录,所以外层循环是a.length-1次
  33. //这里可以直接i=1从第二位开始处理也一样
  34. for(int i=1;i<a.length;i++) {
  35. //缓存待排序的记录
  36. int temp = a[i];
  37. int j;//这个是待插入的位置-1
  38. //跟前面已排序的记录做对比,找到合适的位置,建议从后往前面比,若是比最后一位小,则向前移动一位,否则就直接找到该位置
  39. for(j=i-1;j>=0;j--) {
  40. //如果当前待排序的数比这一个排序的数大,则跳出循环,否则交换位置
  41. if(temp>a[j]) {
  42. break;
  43. }else {
  44. //把当前记录往后面移动一位
  45. a[j+1]=a[j];
  46. }
  47. }
  48. a[j+1]=temp;
  49. }
  50. return a;
  51. }
  52. public static void main(String[] args) {
  53. int[] a = {49,38,65,97,76,13,27,49,78,34,12,64,1};
  54. System.out.print("排序之前:");
  55. for (int i = 0; i < a.length; i++) {
  56. System.out.print(a[i]+" ");
  57. }
  58. System.out.println();
  59. System.out.print("sort1:");
  60. int[] a1 = sort1(a);
  61. int[] a2 = sort2(a);
  62. for (int i = 0; i < a1.length; i++) {
  63. System.out.print(a1[i]+" ");
  64. }
  65. System.out.println();
  66. System.out.print("sort2:");
  67. for (int i = 0; i < a2.length; i++) {
  68. System.out.print(a2[i]+" ");
  69. }
  70. }
  71. }

上面有两种实现方法,第二种sort2比较好,不用每次都新建temp;

 271

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2