算法题目9:插入item到一个按值有序排列的顺序表中

题目:已知长度为n的顺序表A,表中数据元素按值的大小非递减排列,请写出在该表中插入数据信息为item的元素的算法。要求,插入后的线性表仍然保持数据元素按值的大小非递减排列。
解题思路:分两种情况讨论。第1种情况,当item大于或等于表的最后那个元素时,只需将item直接插入在这个元素之后,然后修改表长度即可。第2种情况属于一般情况,即当item大于或等于表中某个元素时,需要从前至后通过比较找到该元素的位置,然后再将item插到该位置之后,最后修改表长。算法如下:
具体实现:
在这里我们会用到前面提到的insert(myarray, i, item),见#### 在长度为n的线性表A的第i个位置插入一个新数据元素item

//构造一个按值有序排列的线性表
for (let index = 1; index <= 10; index++) {
    insert(myarray, index, index*2)
}
//插入item算法
function insertItem(myarray, item) {
    let i
    if ( item>=myarray.data[myarray.length-1] ) {
        myarray.data[myarray.length++] = item
    } else {
        i = 0
        while (item>=myarray.data[i]) {
            i++
        }
        insert(myarray, i+1, item)
    }
    return myarray
}
insertItem(myarray, 11)

你可能感兴趣的:(算法题目9:插入item到一个按值有序排列的顺序表中)