博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
直接插入排序
阅读量:6312 次
发布时间:2019-06-22

本文共 1867 字,大约阅读时间需要 6 分钟。

直接插入排序应用了插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

直接插入排序算法的基本思想:

  在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

1.简单方法

     首先在当前有序区arr[0..i-1]中查找arr[i]的正确插入位置j(0≤j≤i-1);然后将arr[j..i-1]中的记录均后移一个位置,腾出j位置上的空间插入arr[i]。
  注意:
     若arr[i]的关键字大于等于arr[0..i-1]中所有记录的关键字,arr[i]就是插入原位置。
2.改进的方法
  一种查找比较操作和记录移动操作交替地进行的方法。
具体做法:
     将待插入记录arr[i]的关键字从右向左依次与有序区中记录arr[j](j=i-1,i-2,…,0)的关键字进行比较:
     ① 若arr[j]的关键字大于arr[i]的关键字,则将arr[j]后移一个位置;
        ② 若arr[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j+1即为arr[i]的插入位置。

 

1 package com.bingoogol.algorithm.sort; 2  3 /** 4  * 直接插入排序 5  *  6  * @author bingoogol@sina.com 7  */ 8 public class InsertSort { 9 10     public static void main(String[] args) {11         int[] arr = new int[] { 2, 6, 30, 25, 9, 18, 13 };12         System.out.print("排序前:");13         InsertSort.printArr(arr);14         InsertSort.sort(arr);15         System.out.print("排序后:");16         InsertSort.printArr(arr);17     }18 19     public static void sort(int[] arr) {20         for (int i = 1; i < arr.length; i++) {21             int temp = arr[i];22             int j = i - 1;23             while (j >= 0 && arr[j] > temp) {24                 arr[j + 1] = arr[j];25                 j--;26             }27             arr[j + 1] = temp;28         }29     }30 31     public static void swap(int[] data, int i, int j) {32         int temp = data[i];33         data[i] = data[j];34         data[j] = temp;35     }36 37     public static void printArr(int[] arr) {38         for (int i = 0; i < arr.length - 1; i++) {39             System.out.print(arr[i] + ",");40         }41         System.out.println(arr[arr.length - 1]);42     }43 }
查看Java语言版代码

 

 

 

 

转载于:https://www.cnblogs.com/bingoogol/p/sort-insert.html

你可能感兴趣的文章
阿里云正式推出航空大脑,帮助机场提高航班周转效率
查看>>
VMware Workstation :The VMware Authorization Service is not running.
查看>>
MySQL进程常见的State【转】
查看>>
不再局限于人脸识别,北大团队开发出“车脸”识别技术
查看>>
Java线程池
查看>>
Java防盗链在报表中的应用实例
查看>>
7.2bash 脚本选项及组合条件测试
查看>>
MySQL MyISAM/InnoDB高并发优化经验
查看>>
rsync使用
查看>>
varnish
查看>>
vim 使用简单教程
查看>>
SUSE linux 系统管理之时钟同步
查看>>
CREELINKS平台_处理器CeAd资源使用说明(CeAd的配置与使用)
查看>>
Linux协议栈(5)——net-device及代码
查看>>
镁客网每周硬科技领域投融资汇总(12.24-12.30),未来医疗占比猛增,阿里两项亿级投资...
查看>>
Windows中杀死占用某个端口的进程
查看>>
美妆算法---人脸审美标准
查看>>
linux命令行界面转换xls到csv
查看>>
通过帧中继验证OSPF支持的不同网络类型
查看>>
SQL Server的Identity字段使用/复制/重设
查看>>