数据结构-与表头比较后放置

数据结构-与表头比较后放置

与表头比较后放置

  • 有一个顺序表L,其元素为整型数据,设计一个算法,将L中所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分。

思路:

首先将表头元素存储起来,然后用两个整型变量 i,j 分别从两端扫向中间,i从左往右扫,j从右往左扫。

j 从右往左扫到第一个小于表头元素的话,就把此时 j 的值赋值给 i 所指的位置。(后半部分比表头元素大的话就留下依然放在后面,一开始 i 的值就是表头元素的值,它已经被存储起来了,所以覆盖它完全没有问题)

然后 i 从左往右扫到第一个大于表头元素的值,就把此时 i 的值赋值给 j 所指的位置。(同理前半部分比表头元素小的话就留下依然放在前面,由于此时 j 所指的元素的值已经在上一次赋值给了先前的 i 位置,所以此时用 i 元素覆盖 j 完全没有问题)

最后 i,j 相遇结束操作

代码:

void move(Sqlist &L){ 	//L要改变,所以用引用型
    int temp;	//创建临时变量
    int i=0, j=L.length-1;	//创建头尾两个扫把
    temp = L.data[i];	//将表头元素赋值给temp
    while (i<j){	
        while (i<j && L.data[j] > temp)
            --j;	//j从右往左扫描,当来到第一个比temp小的元素时停止。
        
        if (i<j){	//并且每走一步都要判断i是否小于j,这个判断容易遗漏
            L.data[i] = L.data[j];	//移动元素
            ++i;					//i右移一位
        }
        
        while (i<j && L.data[i]<temp)
            ++i;	//i从左往右扫描,当来到第一个比temp大的元素时停止。
        
        if(i<j){
            L.data[j] = L.data[i];  //移动元素
            --j;					//j左移一位j
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独行侠329

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值