插入排序(动图理解)
原创
©著作权归作者所有:来自51CTO博客作者humorchen的原创作品,请联系作者获取转载授权,否则将追究法律责任
算法思路
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的元素序列中从后向前扫描;
- 如果该元素(已排序)大于新元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置后;
- 重复步骤2~5。
动图:
代码实现
public static void insertSort(int[] array){
int temp=0,j=0;
for(int i=1,len=array.length;i<len;i++){
temp=array[i];
j=i;
while (j>0 && array[j-1]>temp){
array[j]=array[j-1];
j--;
}
array[j]=temp;
}
}
package sort;
/**
* 插入排序
* 从第二个开始,一旦比前面的小就往前面插到自己合适的位置去,就跟打扑克牌抓了牌去插牌差不多
* 2 3 1 5
* 由于3比1大,让3往后移动,再跟2对比,2币1 大那么2也往后移动,直到停下来,把1放到属于自己的位置
* 2 - 3 5
* - 2 3 5
* 1 2 3 5
* @author humorchen
*/
public class InsertSort {
public static void insertSort(int[] array){
int temp=0,j=0;
for(int i=1,len=array.length;i<len;i++){
temp=array[i];
j=i;
while (j>0 && array[j-1]>temp){
array[j]=array[j-1];
j--;
}
array[j]=temp;
}
}
public static void print(int[] array){
System.out.println("打印现在的数据");
for(int t:array){
System.out.print(t+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] array={4,3,2,5,6,1,3,7};
insertSort(array);
print(array);
}
}