输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕。 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; /* 插入 */ }}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。