问题编写一个程序来接受一个由n个元素组成的一维数组,并将其分成两半。稍后,将前半部分按升序排序,后半部分按降序排序。
解决方案在单个数组中对两个半部分执行两次操作的解决方案c语言解释如下 -
前半部分升序排序的逻辑如下 -
for (i=0; i<b; ++i){ for (j=i+1; j<b; ++j){ if (number[i] > number[j]){ a = number[i]; number[i] = number[j]; number[j] = a; } }}
用于对后半部分进行降序排序的逻辑如下 -
for (i=b; i<n; ++i){ for (j=i+1; j<n; ++j){ if (number[i] < number[j]){ a = number[i]; number[i] = number[j]; number[j] = a; } }}
用于将数组分成两半并相应打印的逻辑如下 -
升序前半部分for (i=0; i<b; ++i)printf ("%d ",number[i]);
降序后半部分for(i=b;i<n;i++)printf("%d ",number[i]);
示例以下是对单个数组中的两半执行两个操作的 c 程序 -
现场演示
#include<stdio.h>void main(){ int i,j,a,n,b,number[30]; printf ("enter the value of n
"); scanf ("%d", &n); b = n/2; printf ("enter the numbers
"); for (i=0; i<n; ++i) scanf ("%d",&number[i]); for (i=0; i<b; ++i){ for (j=i+1; j<b; ++j){ if (number[i] > number[j]){ a = number[i]; number[i] = number[j]; number[j] = a; } } } for (i=b; i<n; ++i){ for (j=i+1; j<n; ++j){ if (number[i] < number[j]){ a = number[i]; number[i] = number[j]; number[j] = a; } } } printf (" the 1st half numbers
"); printf (" arranged in asc
"); for (i=0; i<b; ++i) printf ("%d ",number[i]); printf("
the 2nd half numbers
"); printf("order arranged in desc.order
"); for(i=b;i<n;i++) printf("%d ",number[i]);}
输出当执行上述程序时,会产生以下结果 -
enter the value of n10enter the numbers20342311455678987654the 1st half numbersarranged in asc11 20 23 34 45the 2nd half numbersorder arranged in desc.order98 78 76 56 54
以上就是c程序在一个单一数组上执行两个半部分的操作的详细内容。