java插入排序
来源:互联网 发布:数据流程图例题 编辑:程序博客网 时间:2024/05/16 08:50
1.直接插入排序
基本思想:拿出一个基准元素,来和前面已经排好序的数组逐a个比较,是从小到大排的话,如果基准数比前面最后一个都大,那再前面的输就不需要比了,直接就可以放在后面了,如果基准元素比前面的数i小,则把这个i往后移,继续和其他的数比较,最后就可以知道这个基准元素要放的位置了。
代码:
public class Direct { public static void main(String[] args){ int[] a={5,9,3,21,49,1,99,99}; for (int i = 0; i <a.length ; i++) { System.out.print(a[i]+" "); } for(int i=1;i<a.length;i++){ //从第二个数开始,第一个数没意义比较 int temp=a[i]; //拿出要比较的数 int j=0; for(j=i-1;j>=0;j--){ //i位置之前是已经排好了的,从后往前比较 if(a[j]>temp){ //一次比较i位置之前的数,如果比要比较的数小,则把j这个位置的数往后移 a[j+1]=a[j]; }else { break; } } a[j+1]=temp;//前面往后移只是依次赋值,最后要还要等一轮比较后,再把要比较的值放入合适的位置,不然会出现重复出现一样的值 } System.out.println(); for (int i = 0; i <a.length ; i++) { System.out.print(a[i]+" "); } }}结果:
2.二分法插入:
基本思想:
二分法插入排序是在插入第i个元素时,对前面的0~i-1元素折半,跟他们中间的那个元素比,如果比它小,则对前一半再进行折半,否则对后一半进行折半,直到left>right,最后就可以找到第i个元素要放的位置了,然后再把第i-1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
代码:
public class Binary { public static void main(String[] args) { int[] a={5,4,5,3,21,49,1,99,99}; for (int i = 0; i <a.length ; i++) { System.out.print(a[i]+" "); } System.out.println("\n---------"); for(int i=1;i<a.length;i++){ int left=0; int right=i-1; int mid=0; int temp=a[i]; //要比较的数 while(left<=right){ //找到合适的位置,其实最后是left=rigt+1 mid=(left+right)/2; if(a[mid]>temp){ right=mid-1; }else { left=mid+1; } } System.out.println(left+":"+right); for(int k=i-1;k>=left;k--){ //从left开始全部往后移 a[k+1]=a[k]; } a[left] = temp; //最后把要比较的数放在left位置上 for (int j = 0; j <a.length ; j++) { System.out.print(a[j]+" "); } System.out.println(); } System.out.println("最终结果"); for (int i = 0; i <a.length ; i++) { System.out.print(a[i]+" "); } }}
结果:
0 0
- Java排序--插入排序
- 排序-插入排序-Java
- 插入排序--直接插入排序[Java实现]
- 插入排序--折半插入排序[Java实现]
- java插入排序之直接插入排序
- 【插入排序】直接插入排序--Java
- 【插入排序】二分插入排序--Java
- 插入排序----直接插入排序----java实现
- [java]插入排序及折半插入排序
- java插入排序--直接插入排序
- Java插入排序
- java插入排序算法
- JAVA 插入排序
- JAVA插入排序分析
- java实现插入排序
- 插入排序java
- java 插入排序
- 插入排序(java)
- Struts2接收传递的参数
- UESTC - 1251 谕神的密码(DP)
- HDU 5912 Fraction (2016-ccpc-长春)
- PHP连接SqlServer2000/2005设置
- Java 反射学习要点(一)
- java插入排序
- static关键字的用法
- Sally配置文件讲解
- PHP中MySQL、MySQLi和PDO的用法和区别
- CuratorFramework节点监听一 PathChildrenCache
- app:transformClassesWithJarMergingForDebug报错
- Web 项目在linux服务器上的配置
- angularjs学习笔记-正确的使用控制器
- 深度学习caffe的代码怎么读?