原本反转整个数组的代码
#include <stdio.h>
#define N 6
int main()
{
int a[N] = {0,1,2,3,4,5};
int i;
int t;
int j;
//反转算法
for(i=0;i<N/2;i++)
{
t = a[i];
a[i] = a[N-1-i];
a[N-1-i] = t;
//遍历输出,每对换一对数值就打印一次数组
for (j=0;j<N;j++)
{
printf("%d\t",a[j]);
}
printf("\n");
}
}
我们要指定下标反转数组的某一部分,思路大体相同,只用修改边界条件和一些细节
改进指定下标反转数组代码
//array swap
int test_array[10]={0,1,2,3,4,5,6,7,8,9};
void array_swap(int start_index,int end_index,int size) {
if(start_index>=end_index)return;//参数输入检查start必须比end小
int valid_length=end_index-start_index+1;//有效长度
int temp=0;
for(int i=start_index;i<(valid_length/2)+start_index;i++) {
temp=test_array[i];
test_array[i]=test_array[valid_length-1+2*start_index-i];
test_array[valid_length-1+2*start_index-i]=temp;
// for(int i=0;i<size;i++) {
// printf("%d\t",test_array[i]);
// }
// printf("\r\n");
}
for(int i=0;i<size;i++) {
printf("%d\t",test_array[i]);
}
}
int main(void)
{
array_swap(1,7,10);//下标1~7之间反转
return 0;
}
执行效果
执行过程