/** * Created by Administrator on 2017/4/8. * 插入排序:分为已排序和未排序两部分,从小到大 */ public class CharuSort { public void charusort(int[] ss){ for(int i=1;i<ss.length;i++){ for(int j=0;j<i;j++){ if(ss[i]<ss[j]){ int temp=ss[i]; for(int k=i;k>j;k--){ //刚开始花括号没有打,导致错误,for循环必须有花括号 ss[k]=ss[k-1]; } ss[j]=temp; } } } } public static void main(String[] args) { CharuSort cs=new CharuSort(); int ss[]={34,23,56,78,44,48,26,67}; cs.charusort(ss); for(int i=1;i<ss.length;i++) System.out.print(ss[i]+" "); } }
思路:1,确定基准点:s[i];i(1:length-1)
2.比较基准点与其之前的数组元素(s[0]>s[i-1]),如果基准点小于之前的元素如s[j](从左到右比较),就把j>i-1的元素向后移一位,并且把s[i]赋值给s[j],这里要注意交换的顺序,可以用中间变量。
3.循环上述两步操作
要善于使用调试一步一步进行,这样才能观察到自己完全没有想到的死角,比如这一题目中,我在for循环后没有打花括号{},导致我想要循环的语句值执行了一次,所以得不到正常结果,浪费了很多时间。