您的位置:首页 > 其它

插入排序(Insertion Sort)

2017-07-13 22:26 190 查看
写点东西总结一下,朋友们,你们也自己写写东西总结一下,这样有助于我们记住一些东西

先把代码贴出来

public static void selectSort(int[]arr) {
int temp;
for(int i=0;i<arr.length-1;i++){ //表示趟数,一共arr.length-1次。
for(int j=i+1;j>0;j--){
if(arr[j]<arr[j-1]){
temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}else{
break;
}

}
}
}

整体思想:

从数组的第一个数开始,之后每次放进来一个数,都给他排好序,打牌抓牌一下,后面的数要插入前面排好序的数中就行了

这个要循环arr.length-1;这么多次

步骤:

1.最外层循环记录排序的趟数,

2.然后里面这层int j=i+1;j>0;j-- 这个意思就是i限制前面的数,j+1,就是往后移动一位,把这后面一个数插入到前面排好序的数组中。

所以这个循环是这个意思,自己理解一下。

如果从后面排序怎么写这个循环, 趟数是一样的,那我j就是j=i-1;j<arr.length;j++ 了,

欢饮来找茬,逻辑思维不行啊,这个不能怪我了。大脑的内存不够吧,总是无法一下子加载那么多东西到大脑中去。

3.这循环里面就开始交换了,arr[j]<arr[j-1],就是说后面的数比前面的数小,那就交换一下,如果不是就break,接着进入下一个交换吧,不是下一趟这里。记住了

                                       temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;

这里遇到一个问题,temp在外层循环外面定义的,我也不太明白,就是在交换的逻辑之前都可以吧感觉。

                                    int temp;

                                    temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;

因为这个是临时变量只起到交换数的作用交换后就没用了。我的理解就是可以这么写的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序