
上QQ阅读APP看书,第一时间看更新
004 分拆顺序表:左边的元素小于等于0,右边的大于0
编写一个算法,把一个顺序表分拆成两个部分,使顺序表中不大于0的元素位于左端,大于0的元素位于右端。要求不占用额外的存储空间。例如,顺序表(-12,3,-6,-10,20,-7,9,-20)经过分拆调整后变为(-12,-20,-6,-10,-7,20,9,3)。
【算法思想】
设置两个指示器i和j,分别扫描顺序表中的元素,i和j分别从顺序表的左端和右端开始扫描。如果i遇到小于等于0的元素,则略过不处理,继续向前扫描;如果遇到大于0的元素,则暂停扫描。如果j遇到大于0的元素,则略过不处理,继续向前扫描;如果遇到小于等于0的元素,则暂停扫描。如果i和j都停下来,则交换i和j指向的元素。重复执行直到i≥j为止。
第1章\范例01-04.c


运行结果(见图1.7)

图1.7 算法运行效果