码迷,mamicode.com
首页 > 编程语言 > 详细

直接插入排序的加强版

时间:2017-07-25 01:02:44      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:分享   port   ann   直接插入排序   scan   continue   while   static   scanner   

技术分享

 

如有时间。再在原地,把重复的元素干掉,i指向无重复的,j向后遍历

package jjj; import java.util.Arrays; import java.util.Scanner; public class hhhhhhhhhhh { public static void main(String[] args){ int a[] = {-1,1,2,1,1,1,1,3,2,1,1,1,0,1,1,0}; shu(a,a.length); System.out.println(Arrays.toString(a)); } static int max(int a,int b){ if(a>b) return a; return b; } static int min(int a,int b){ if(a>b) return b; return a; } static void shu(int a[],int N) { //转入第一个元素 for(int j=4;j<N;j=j+3){ int a1,a2,a3; int i =j; while(a[i]<a[i-3]&&i>=4){ a1=a[i-3]; a2=a[i-2]; a3=a[i-1]; a[i-3]=a[i]; a[i-2]=a[i+1]; a[i-1]=a[i+2]; a[i]=a1; a[i+1]=a2;a[i+2]=a3; i=i-3; } } for(int jJ=4;jJ<N;jJ=jJ+3){ int i = jJ; //费了很多时间,你是想用上面的那个插入方法,while里面会用很多的判断 while(i>=4){ //三重防护 if(a[i]>a[i-3]) {i=i-3; continue;}//不用交换了 if((a[i]==a[i-3]) && max(a[i+1],a[i+2])>max(a[i-2],a[i-1]) ) {i=i-3;continue;} if((a[i]==a[i-3]) && max(a[i+1],a[i+2])==max(a[i-2],a[i-1]) && min(a[i+1],a[i+2])>=min(a[i-2],a[i-1]) ) {i=i-3;continue;} //交换区 int a1,a2,a3; a1=a[i-3]; a2=a[i-2]; a3=a[i-1]; a[i-3]=a[i]; a[i-2]=a[i+1]; a[i-1]=a[i+2]; a[i]=a1; a[i+1]=a2;a[i+2]=a3; i=i-3; } } } }

  

直接插入排序的加强版

标签:分享   port   ann   直接插入排序   scan   continue   while   static   scanner   

原文地址:http://www.cnblogs.com/cs-lcy/p/7231731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!