玩程序不玩点算法,感觉不够高大上.
———–我记得这是我说过的名言.
于是乎,我就去网上扒拉扒拉,学着人家写.
模仿是成功的第一步.
————我又记得我说过这句名言.
直接插入排序算法:
假设前面(n-1)个数(其中n>=2)已经是排好顺序的, 现在要把第n个数插到前面的有序数中, 使得这 n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
实现的思路,就是:把数组从第二个取出来,先和第一个比较,如果第一个比第二个大,那就往后移动一个单位.当取到第三个的时候,和前面的两个对比,把大于当前取出来的这个数都往后移动一个单位,记得是,所有大于这个数的都要移动,把当前的这个数放在空出来的那个位置就ok;
如下图(这是从网络上搜索的一张图片,我觉得这张图还是很直观的):
package com.wangjun.sort;
import java.util.Arrays;
/**
* 插入排序
* 直接插入排序、希尔排序
* 基本思想:
* 在要排序的一组数中,
* 假设前面(n-1)个数(其中n>=2)已经是排好顺序的,
* 现在要把第n个数插到前面的有序数中,
* 使得这 n个数也是排好顺序的。
* 如此反复循环,直到全部排好顺序。
* @author 王俊
*
*/
public class InsertSort {
public static void main(String[] args) {
int[] a={49,38,65,95,25,53,51};
insertSort(a);
}
/**
* 直接插入排序算法
* @param a 需要排序的数组
*/
private static void insertSort(int[] a) {
int temp=0;
//遍历数组
for(int i=1;i<a.length;i++){
int j=i-1;
//把第i个数取出来
temp=a[i];
//开始和之前的所有数进行比较
//并将大于a[i]是数往后移动一个单位,
//在将这个数插入到当前位置
for(;j>=0 && temp<a[j];j--){
a[j+1]=a[j];
}
a[j+1]=temp;
System.out.println(Arrays.toString(a));
}
}
}
代码很简单,但是理解很难.因为小学数学是自学的…哈哈