package cyz;
import java.util.Arrays;
public class Insert_sort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arr=new int []{1,3,2,5,4,6};
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
/*****
* 插入排序
*
* 一开始我们列出来的数据是1,3,2,5,4,6
* 当i为1时
* 现在我们进行进行排序
* 1,3,2,5,4,6
* |
* i
* 在这条线之前的数据都是有序的,就比如说1,只有一个数字便是特殊的有序
*第一次 1 , 3, 2, 5, 4, 6
* | |
* j j+1
* 如果i-1指向的数比i小的话,这将i进行+1,也就是向前移动
*
*
*当i为2时
* 1, 3, 2, 5, 4, 6
* | |
* i-1 i
*
*第一次 1, 3, 2, 5, 4, 6
* | |
* j j+1
* 如果i-1指向的值比i大的话,则temp=arr[i]进行暂存,接着进行 arr[i]=arr[i-1]的循环操作,因为我们知道i-1之前的是有序的,当出现temp>arr[i-1]时,就直接插入后面即可:
*
*第二次 1, 2, 3, 5, 4, 6
* | |
* j j+1
*
*当i=3时
* 1, 2, 3, 5, 4, 6
* | |
* i-1 i
* 第一次:
* 1, 2, 3, 5, 4, 6
* | |
* j j+1
* 第二次:
* 1, 2, 3, 5, 4, 6
* | |
* j j+1
* 第三次:
* 1, 2, 3, 5, 4, 6
* | |
* j j+1
*
*当i=4时
* 1, 2, 3, 5, 4, 6
* | |
* i-1 i
* 第一次:
* 1, 2, 3, 4, 5, 6
* | |
* j j+1
* 第二次:
* 1, 2, 3, 4, 5, 6
* | |
* j j+1
* 第三次:
* 1, 2, 3, 4, 5, 6
* | |
* j j+1
* 第四次:
* 1, 2, 3, 4, 5, 6
* | |
* j j+1
* @author cyz
*/
public static void insertSort(int[] arr){
for (int i=1;i<arr.length;i++){
if(arr[i]<arr[i-1]){
int temp=arr[i];
int j;
for(j=i-1;j>=0&&temp<arr[j];j--){
arr[j+1]=arr[j];// arr[i]=arr[i-1],由于已经使用了i,因此用j代替
}
arr[j+1]=temp;
}
}
}
}