ปัญหา
เขียนโปรแกรมรับอาร์เรย์หนึ่งมิติของ 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\n"); scanf ("%d", &n); b = n/2; printf ("Enter the numbers \n"); 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\n"); printf (" arranged in asc\n"); for (i=0; i<b; ++i) printf ("%d ",number[i]); printf("\nThe 2nd half Numbers\n"); printf("order arranged in desc.order\n"); for(i=b;i<n;i++) printf("%d ",number[i]); }
ผลลัพธ์
เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
Enter the value of N 10 Enter the numbers 20 34 23 11 45 56 78 98 76 54 The 1st half numbers arranged in asc 11 20 23 34 45 The 2nd half Numbers order arranged in desc.order 98 78 76 56 54