开发者社区> 问答> 正文

插入排序法的基本思想

插入排序法的基本思想

展开
收起
知与谁同 2018-07-22 19:57:27 2793 0
1 条回答
写回答
取消 提交回答
  • 输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕。  function insertSort(&$arr){        for ($i=1; $i <count($arr) ; $i++) {            $insertValue=$arr[$i];            $insertKey=$i-1;             while ( $insertkey>=0 && $insertValue<$arr[$insertkey]) {                $arr[$insertKey+1]=$arr[$insertKey];                                $insertkey--;           }           $arr[$insertkey+1]=$insertValue;        }    }内容扩充 内容扩充 例1:输入一个数,插入一个各元素已经按照升序排列的数组中,插入后使数组中元素仍然是按照升序排列的。思想:把欲插入的数与数组中各数逐个比较, 当找到第一个比插入数大的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素a[i]即可。如果被插入数比所有的元素值都小则插入最前位置。
    C语言: #include stdio.hvoid main(){    int    m, i, j;    int    a[11] = { 2, 6, 7, 9, 13, 16, 19, 21, 25, 29 }; /* 由于后面有插入1个元素的操作,故数组长度定为11(虽然数组中只有10个元素) */    scanf( %d, &m );    for ( i = 0; i < 10; i++ )        if ( m < a[i] )            break;    {        for ( j = 9; j >= i; j-- )            a[j + 1] = a[j];    }    a[i] = m;    for ( i = 0; i < 11; i++ )        printf( %d\t, a[i] );}例2:输入一个数,插入一个各元素已经按照降序排列的数组中,插入后使数组中元素仍然是按照降序排列的。思想:把欲插入的数与数组中各数逐个比较, 当找到第一个比插入数小的元素i时。如果被插入数比所有的元素值都小则插入最后位置。
    C语言: #include <stdio.h>void main(){    int    i, j, p, q, s, n;    int    a[11] = { 162, 127, 105, 87, 68, 54, 28, 18, 6, 3 };    printf( input number:\n );    scanf( %d, &n );    for ( i = 0; i < 10; i++ )        if ( n > a[i] )            break;    {        for ( s = 9; s >= i; s-- )            a[s + 1] = a[s];    }    a[i] = n;    for ( i = 0; i <= 10; i++ )        printf( %d , a[i] );    printf( \n );}/*eg.3 * 使用插入排序对一个随机序列进行排序*/void charupx( int before[], int m )                             /* 获取一个数组,m表示它的元素个数 */{    int varout, varin, temp;    for ( varout = 1; varout < m; varout++ )    {        temp    = before[varout];                       /* 这是目标数(假设的) */        varin    = varout - 1 ;             while ( varin >= 0 && temp < before[varin] )        {            before[varin + 1] = before[varin];      /* 所有数组下标向后一个,值不变 */            varin--;                                /*看前一个数是否还要移动 */        }        before[varin + 1] = temp;                       /* 插入 */    }}

    2019-07-17 22:50:47
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载