【算法设计与分析基础】12、插入排序

package cn.xf.algorithm.ch04;

import org.junit.Test;

/**
 * 
 * 
 * .
 * @author xiaof
 * @version Revision 1.0.0
 * @see:
 * @创建日期:2017年5月23日
 * @功能说明:插入排序
 *
 */
public class InsertSort {
    
    /**
     * 插入排序,核心思想是,遍历这个数据,然后把所有的所有的数据从前往后往这个空位拉开一个身位,
     * 直到找到比这个数小的位置后面,往这个空位插入当前遍历到的数据
     * @param Data
     * @return
     */
    public int[] insertionSort(int Data[]) {
        //遍历原始数据
        for(int i = 0; i < Data.length; ++i) {
            //保存当前遍历的数据
            int curData = Data[i];
            //接下来从这个位置开始往前遍历,直到最后
            int j = i - 1;
            while(j >= 0 && Data[j] > curData) {
                //寻找比这个当前遍历数据更小的数据,吧当前数据插入到这个数据之后
                Data[j + 1] = Data[j];  //后移一位数据
                j = j - 1;
            }
            //插入遍历到的数据之后
            Data[j + 1] = curData;
        }
        
        return Data;
    }
    
    @Test
    public void test1() {
        //测试插入排序
        int Data[] = {89, 45, 68, 90, 29, 34, 17};
        InsertSort is = new InsertSort();
        int result[] = is.insertionSort(Data);
        
        for(int i : result) {
            System.out.print(i + " ");
        }
    }
}

  

 

插入排序:

 

 

posted @ 2017-05-23 17:09  cutter_point  阅读(133)  评论(0编辑  收藏  举报