zoukankan      html  css  js  c++  java
  • 算法分析:什么是插入排序?

    什么是插入排序?

    同样,插入排序会涉及到两个区域:

    • 有序区域。有序区域内的元素,元素从小到大分布(或者从大到小分布)。在开始排序之前有序区域为第一个元素
    • 无序区域。无序区域内的元素,元素任意分布,在开始排序之前除了第一个元素之外的所有元素都处在无序区域内。

    插入排序,在无序区域内根据顺序取出每一个元素X。在有序区域内从后往前寻找合适元素X的位置,保证插入后,元素X与有序区域内的其他元素依然组成有序区域。

    我想用一组数据来阐述插入排序的过程。元素6处于无序区域内,除了元素6以外的其他元素处于无序区域内。

    • 第一轮排序开始,从无序区域内找到第一个元素3,和有序区域内的从最后一个元素开始比较。直到元素3找到合适的位置插入,和有序区域的其他元素一起组成有序区域。由于3 < 6。 6之前没有其他元素。因此6和3交换位置。

    • 第二轮排序开始,从无序区域内找到元素2,和有序区域内的从最后一个元素开始比较。知道元素2找到合适的位置插入,和有序区域的其他元素一起组成有序区域。由于2<6,同时2<3。元素3又是第一个元素。因此元素2在元素3之前的位置插入。

    ...

    依次类推。

    • 在插入排序之前,第一个元素认为在有序区域内。
    • 每进行一轮排序。有序区域的元素个数增加1。
    • 总共需要进行(元素总个数-1)轮排序。

    最后我们使用Java代码来展示上述的算法。

     1 private static void sort() {
     2 
     3         Integer[] data = {6,3,2,1,8,9,7,5};
     4 
     5         for(int i=1; i<data.length; i++) {
     6 
     7             //无序区域中,最左边的元素
     8             int compare = data[i];
     9             //有序区域中,最右边的元素
    10             int m = i - 1;
    11 
    12             while(m >= 0 && data[m] > compare) {
    13                 data[m+1] = data[m];
    14                 m--;
    15             }
    16             data[m+1] = compare;
    17         }
    18 
    19 
    20 }

     

  • 相关阅读:
    PHP开发学习门户改版效果图投票
    怎样用js得到当前页面的url信息方法(JS获取当前网址信息)
    java 获取当期时间之前几小时的时间
    超人学院Hadoop大数据技术资源分享
    plsql导入一个目录下全部excel
    UML简单介绍
    Mod in math
    父母之爱子,则为之计深远是什么意思?_百度知道
    2014创客118新年大爬梯_活动行-国内最好的活动报名及售票平台!
    北京创客空间 BEIJING MAXPACE的小站
  • 原文地址:https://www.cnblogs.com/behindyou/p/10609995.html
Copyright © 2011-2022 走看看