经典排序之插入排序

来源:互联网 发布:java半角正则表达式 编辑:程序博客网 时间:2024/05/29 12:15

一、插入排序

        它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

        插入排序的算法描述:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

        下面看具体代码:

 void insertion_sort(char array[], int first, int last) {        int i,j;        int temp;        for (i = first+1; i<=last;i++)        {                temp = array[i];                j=i-1;                 //与已排序的数逐一比较,大于temp时,该数向后移                while((j>=first) && (array[j] > temp))//当first=0,j循环到-1时,由于[[短路求值]],不会运算array[-1]                {                        array[j+1] = array[j];                        j--;                }                array[j+1] = temp;      //被排序数放到正确的位置         } }

        

原创粉丝点击