ได้รับอาร์เรย์และช่วงของอาร์เรย์ [startval, endval] อาร์เรย์ถูกแบ่งเป็นสามส่วน:
- องค์ประกอบทั้งหมดที่น้อยกว่า startval อยู่ก่อน
- องค์ประกอบทั้งหมดในช่วง startval ถึง endval อยู่ถัดไป
- องค์ประกอบทั้งหมดที่มากกว่า endval อยู่ท้ายสุด
ตัวอย่าง
Input: A = [1, 14, 51, 12, 4, 2, 54, 20, 87, 98, 3, 1, 32] startval = 14, endval = 54 Output: A = [1, 12, 4, 2, 3, 1, 14, 51, 20, 32, 54, 87, 98]
อัลกอริทึม
Step1: แบ่งลิสต์เป็นสามส่วน ส่วนแรกมีองค์ประกอบน้อยกว่า startval ส่วนที่สองมีองค์ประกอบระหว่าง startval และ endval ส่วนที่สามมีองค์ประกอบมากกว่า endval Step2: ต่อทั้งสามส่วนเข้าด้วยกัน
ตัวอย่างโค้ด
def partition_array(input, lowVal, highVal):
# แยก input list เป็นสามส่วน
my_first = [num for num in input if num < lowVal]
my_second = [num for num in input if (num >= lowVal and num <= highVal)]
my_third = [num for num in input if num > highVal]
# ต่อทั้งสามส่วน
print(my_first + my_second + my_third)
# Driver program
if __name__ == "__main__":
my_input = [10, 140, 50, 200, 40, 20, 540, 200, 870, 980, 30, 10, 320]
my_lowVal = 140
my_highVal = 200
partition_array(my_input, my_lowVal, my_highVal)
ผลลัพธ์
[10, 50, 40, 20, 30, 10, 140, 200, 200, 540, 870, 980, 320]