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 看左边
- 起始
- 找到右边第一个比枢轴2小的元素-1,其下标为6
- 把-1复制到左边 i 的位置
- i 右移
- i 继续右移
- 直到找到左边比枢轴大的元素5, 其下标为4
- 把5的值赋给 j 的位置,j 左移
- 继续左移试图找到右边比枢轴小的元素,即执行
while (i<j && array[j] >= tmp){
j--;
}
左移一位后 i = j = 4,大的while循环结束
9. 把枢轴的值赋给 i j 交接的位置结束