设一组数有10个元素,已按升序排好。现要求编写一程序,它能够吧从指定位置开始的n个数据按逆序重新排列,

并输出新的完整数列(例如,原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到的新数列位2,4,6,16,14,12,10,8,18,20)。

C语言源代码:

#include "stdio.h"

/* 对数组startIndex位置起,长度为length的元素进行逆序排列 */
void sort(int arr[], int startIndex, int length)
{
int i, j, k;
int temp;

for(i=0; i<length-1; i++)
{
k = i;
for(j=i+1; j<length; j++)
if(arr[j+startIndex] > arr[k+startIndex])
k = j;
if(k != i)
{
temp = arr[k+startIndex];
arr[k+startIndex] = arr[i+startIndex];
arr[i+startIndex] = temp;
}
}
}

void main()
{
int arr[] = {2,4,6,8,10,12,14,16,18,20};
int size = 10;
int startIndex = 3, length = 5;
int i;

printf("before sort : ");
for(i=0; i<size; i++)
printf("%d ", arr[i]);
printf("\n");

sort(arr, startIndex, length);

printf("after soft : ");
for(i=0; i<size; i++)
printf("%d ", arr[i]);
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-24
来一个通用的,C语言编的
#include<stdio.h>
main()
{int a[10];
int m,n,i,j,t;
scanf("%d,%d\n",&m,&n);
for(i=0;i<10;i++)
scanf("%d",&a[i]);
j=n+m-2;
for(i=m-1;i<m/2+n-1;i++,j--)
{t=a[i];
a[i]=a[j];
a[j]=t;}
for(i=0;i<10;i++)
printf("%d\n",a[i]);
printf("\n");
}
相似回答