ให้อาร์เรย์ arr[] มีองค์ประกอบจำนวน n รายการ หน้าที่ของเราคือตรวจสอบว่าอาร์เรย์ที่ระบุอยู่ในลำดับการจัดเรียงหรือไม่ ถ้าอยู่ในลำดับการจัดเรียง ให้พิมพ์ "อาร์เรย์อยู่ในลำดับการจัดเรียง" หรือพิมพ์ "อาร์เรย์" ไม่เรียงลำดับ”
ในการแก้ปัญหาดังกล่าว เราสามารถใช้วิธี Iterative หรือ Recursive ได้ เราจะพูดคุยกันทั้งสองเรื่อง
แนวทางแบบเรียกซ้ำ
ดังนั้นวิธีการแบบเรียกซ้ำคืออะไร? ในวิธีแบบเรียกซ้ำ เราเรียกฟังก์ชันซ้ำแล้วซ้ำอีกจนกว่าเราจะได้ผลลัพธ์ที่ต้องการ ในแนวทางแบบเรียกซ้ำ ค่าที่ส่งคืนโดยฟังก์ชันจะถูกเก็บไว้ในหน่วยความจำสแต็ก
ป้อนข้อมูล
arr[] = {12, 13, 14, 16, 18} ผลผลิต
The array is in sorted order
คำอธิบาย − 12 <13 <14 <16 <18 ดังนั้น ใช่ อาร์เรย์ถูกจัดเรียงแล้ว
ป้อนข้อมูล
arr[] = {2, 1, 3, 5, 6} ผลผลิต
The array is not in sorted order
คำอธิบาย − 2 ไม่เล็กกว่า 1 จึงไม่เรียงลำดับ
แนวทางที่ใช้ด้านล่างมีดังต่อไปนี้ในการแก้ปัญหา -
-
รับอาร์เรย์ arr[] เป็นอินพุตและเริ่มต้น n ด้วยขนาดของอาร์เรย์
-
ตรวจสอบว่าเรามาถึงจุดเริ่มต้นของอาร์เรย์หรือไม่ คืนค่า true
-
ตรวจสอบว่าองค์ประกอบก่อนหน้าของอาร์เรย์ไม่เล็กกว่าองค์ประกอบถัดไป ให้คืนค่าเท็จ
-
ลดระดับ n และไปที่ขั้นตอนที่ 2
อัลกอริทึม
Start
In function int arraySortedCheck(int arr[], int n)
Step 1→ If n == 1 || n == 0 then,
Return 1
Step 2→ If arr[n-1] < arr[n-2] then,
Return 0
Step 3→ Return arraySortedCheck(arr, n-1)
In Function int main(int argc, char const *argv[])
Step 1→ Declare and initialize arr[] as {1,8,3,4,7}
Step 2→ Declare and initialize int n as sizeof(arr)/sizeof(arr[0])
Step 3→ If arraySortedCheck(arr, n) then,
Print "Array is in sorted order”
Step 4→ Else
Print "Array is not in sorted order”
Stop ตัวอย่าง
//Recursive approach
#include <stdio.h>
//Recursive function to check if it
//is in sorted order or not
int arraySortedCheck(int arr[], int n){
//all elements are checked and
//all are in sorted order
if (n == 1 || n == 0)
return 1;
//when an array is not in sorted order
if(arr[n-1] < arr[n-2])
return 0;
return arraySortedCheck(arr, n-1);
}
int main(int argc, char const *argv[]){
int arr[] = {1,8,3,4,7};
int n = sizeof(arr)/sizeof(arr[0]);
if(arraySortedCheck(arr, n)){
printf("Array is in sorted order\n");
}
else
printf("Array is not in sorted order\n");
return 0;
} ผลลัพธ์
หากรันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
The array is in sorted order
แนวทางการทำซ้ำ
ในการวนซ้ำ เราใช้ลูปเช่น for-loop, while-loop หรือ do-while loop ซึ่งดำเนินการคำสั่งจนกว่าเงื่อนไขจะเป็นจริงซึ่งหมายถึง 1
ป้อนข้อมูล
arr[] = {12, 13, 14, 16, 18} ผลผลิต
The array is in sorted order
คำอธิบาย − 12 <13 <14 <16 <18 ใช่ อาร์เรย์อยู่ในลำดับการจัดเรียง
ป้อนข้อมูล
arr[] = {2, 1, 3, 5, 6} ผลผลิต
The array is not in sorted order
คำอธิบาย 2 ไม่เล็กกว่า 1 จึงไม่เรียงลำดับ
แนวทางที่ใช้ด้านล่างมีดังต่อไปนี้ในการแก้ปัญหา
-
รับอินพุต arr[].
-
วนซ้ำจนกว่าจะถึงจุดสิ้นสุดของอาร์เรย์นั้น
-
ตรวจสอบว่าองค์ประกอบปัจจุบันไม่เล็กกว่าองค์ประกอบถัดไป ให้คืนค่าเท็จและออก
-
อย่างอื่นต่อ
-
-
ไปที่ขั้นตอนที่ 2
อัลกอริทึม
Start
In function int arraySortedCheck(int arr[], int n)
Step 1 → Loop For i = 0 and i < n and ++i
If arr[n-1] < arr[n-2] then,
Return 0
Step 2→ Return 1
In Function int main(int argc, char const *argv[])
Step 1→ Declare and initialize arr[] as {1,8,3,4,7}
Step 2→ Declare and initialize int n as sizeof(arr)/sizeof(arr[0])
Step 3→ If arraySortedCheck(arr, n) then,
Print "Array is in sorted order”
Step 4→ Else
Print "Array is not in sorted order”
Stop ตัวอย่าง
//Iterative approach
#include <stdio.h>
int arraySortedCheck(int arr[], int n){
for (int i = 0; i < n; ++i){
//when an array is not in sorted order
if(arr[n-1] < arr[n-2])
return 0;
}
//all elements are checked and
//all are in sorted order
return 1;
}
int main(int argc, char const *argv[]){
int arr[] = {1,8,3,4,7};
int n = sizeof(arr)/sizeof(arr[0]);
if(arraySortedCheck(arr, n)){
printf("Array is in sorted order\n");
}
else
printf("Array is not in sorted order\n");
return 0;
} ผลลัพธ์
หากรันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
The array is in sorted order