Any valuable knowledge that I have learned is derived from self-study. -- Charles Robert Darwin 我所学到的任何有价值的知识都是由自学中得来的 -- 达尔文 比如对于这样一个数组 {4,9,15,21,28,30,30,42,51,62},要把下标为4的元素(第5个元素)删除 首先我们要明确,数组的长度是10,删除的元素下标是4,区分下标和序号,下标比序号少1,比如下标是4的元素,他的序号是5,在数组中应该是第5个元素。
下标 0 1 2 3 4 5 6 7 8 9 值 4 9 15 21 28 30 30 42 51 62 第一步,将下标为5(6号)元素给下标为4的元素 下标 0 1 2 3 4 5 6 7 8 9 值 4 9 15 21 30 30 30 42 51 62 第二步,将下标为6(7号)元素给下标为5的元素 下标 0 1 2 3 4 5 6 7 8 9 值 4 9 15 21 30 30 30 42 51 62 第三步,将下标为7(8号)元素给下标为6的元素 下标 0 1 2 3 4 5 6 7 8 9 值 4 9 15 21 30 30 42 42 51 62 第四步,将下标为8(9号)元素给下标为7的元素 下标 0 1 2 3 4 5 6 7 8 9 值 4 9 15 21 30 30 42 51 51 62 第五步,将下标为9(10号)元素给下标为8的元素 下标 0 1 2 3 4 5 6 7 8 9 值 4 9 15 21 30 30 42 51 62 62 到此为止,数组元素的删除完毕(本质是移动覆盖),但别忘了长度要减1. 长度是9,也就是说这个数组中对我们有用的元素是0-8这9个元素。第10个元素虽然在原来位置保留着,是已经丢弃的数据---没用了。 还要总结出移动结束的条件是当前位置是“长度-2”时移动结束。我们也可以总结成下表 下标 0 1 2 3 4 5 6 7 8 9 值 4 9 15 21 28 30 30 42 51 62
从左到右移动 明白这个原理后,我人再慢慢写代码,看在程序中是如何实现的,把思维过程转化成代码,也不是一件简单的事,需要反复练习才行,想信有很多同学看过算法和数据结构一类的书,很多书上只说思想,没有给我代码,对于初学者仍然写不出程序。 同理我们画出插入元素的图表 已知:数组{4,9,15,28,30,30,42,51,62},需在下标为3的(第4个)元素之前插入一个元素“21”。则需要将第9个位置到第4个位置的元素依次后移一个位置,然后将“21”插入到第4个位置,
同理你可以分析一下有序数组的合并算法。