线性表:顺序表的划分

CLion Debug如何查看数组内全部元素

找到Watches,图标如下,

在这里插入图片描述
添加一个表达式:

(ArrayType(*)[ArrayLength])array

在这里插入图片描述

代码

#include <stdio.h>

// 以第一个元素为枢轴划分数组
void partition(int array[], int len){
    // i指向左边比枢轴大的,j指向右边比枢轴小的
    int i = 0, j = len-1;
    // 存储枢轴的值,i位置就没用了,可以覆盖掉
    int tmp = array[i];

    // 此循环结束时i=j,即左边都比枢轴小,右边都比枢轴大
    while (i < j){

        // 1.从右边找到第一个小于枢轴的元素,j记录此元素下标
        while (i<j && array[j] >= tmp){
            j--;
        }
        if (i < j){
            // 复制到左边没用的i位置,交换后位置j就没用了
            array[i] = array[j];
            i++;
        }

        // 2.从左边找到第一个大于等于枢轴的元素,i记录此元素下标
        while (i<j && array[i] < tmp){
            i++;
        }
        if (i < j){
            // 把此元素复制到右边,即没有用处的j位置
            // 复制后i位置就没用了
            array[j] = array[i];
            j--;
        }
    }
    // 把枢轴的值赋给中间i和j共同指向的位置
    array[i] = tmp;
}


int main() {
    int array[] = {2, -1, -7, -3, 5, 6, -1};
    int len = 7;
    partition(array, len);

    return 0;
}

运行过程

数组元素看右边,i 和 j 看左边

  1. 起始
    在这里插入图片描述
  2. 找到右边第一个比枢轴2小的元素-1,其下标为6在这里插入图片描述
  3. 把-1复制到左边 i 的位置在这里插入图片描述
  4. i 右移在这里插入图片描述
  5. i 继续右移在这里插入图片描述
  6. 直到找到左边比枢轴大的元素5, 其下标为4在这里插入图片描述
  7. 把5的值赋给 j 的位置,j 左移在这里插入图片描述
  8. 继续左移试图找到右边比枢轴小的元素,即执行
while (i<j && array[j] >= tmp){
            j--;
}

左移一位后 i = j = 4,大的while循环结束在这里插入图片描述
9. 把枢轴的值赋给 i j 交接的位置在这里插入图片描述结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值