Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงจำนวนบวกและลบด้วยฟังก์ชัน sort() ใน C++

ภาพรวม

ได้รับอาร์เรย์จำนวนเต็ม arr[] มีทั้งบวกและลบ งานคือจัดเรียงอาร์เรย์ใหม่ให้อิลิเมนต์ทั้งหมดเรียงลำดับ โดยใช้ฟังก์ชัน sort() ในบิลด์ของ C++ STL และเทคนิคการเรียกซ้ำ

ตัวอย่าง

อินพุต − int arr[] = {4, 2, -1, -1, 6, -3, 0}

เอาต์พุต − Rearrangement of positive and negative numbers using inbuilt sort function is: -3 -1 -1 0 2 4 6

คำอธิบาย − อาร์เรย์ขนาด 7 จัดเรียงให้ลบอยู่หน้าบวกอยู่หลัง ได้ -3 -1 -1 0 2 4 6

อินพุต − int arr[] = {-9, -10, 2, 3, 10, 5, 8, 4}

เอาต์พุต − Rearrangement of positive and negative numbers using inbuilt sort function is: -10 -9 2 3 4 5 8 10

คำอธิบาย − อาร์เรย์ขนาด 8 จัดเรียงได้ -10 -9 2 3 4 5 8 10

แนวทางการแก้ปัญหา

1. ใช้ sort()

  • รับอาร์เรย์ คำนวณขนาด
  • เรียก Rearrangement(int arr[], int size)
  • ภายใน เรียก sort(arr, arr + size) ของ STL
  • พิมพ์ผลลัพธ์

2. ใช้การเรียกซ้ำ (Recursion)

  • รับอาร์เรย์ คำนวณขนาด
  • ตัวแปร temp นับจำนวนลบ
  • วนนับอิลิเมนต์ < 0 เพิ่ม temp
  • เรียก Rearrangement(arr, 0, size-1) แบบเรียกซ้ำ
  • เรียก Rotate(arr, temp, size-1)
  • ฟังก์ชัน Rearrangement(arr, first, last):
    • Base case: first == last คืนค่า
    • เรียกซ้ำ Rearrangement(arr, first+1, last)
    • หาก arr[first] >= 0 เรียก Rotate(arr, first+1, last) และ Rotate(arr, first, last)
  • ฟังก์ชัน Rotate(arr, first, last) สลับปลายสองข้างจน first >= last
  • พิมพ์ผลลัพธ์

ตัวอย่างโค้ด C++ - ใช้ sort()

#include <bits/stdc++.h> 
using namespace std; 

void Rearrangement(int arr[], int size){ 
    sort(arr, arr + size); 
} 

int main(){ 
    int arr[] = {4, 2, -1, -1, 6, -3, 0}; 
    int size = sizeof(arr)/sizeof(arr[0]); 
    Rearrangement(arr, size); 
    cout << "Rearrangement of positive and negative numbers using inbuilt sort function is: "; 
    for(int i = 0; i < size; i++){ 
        cout << arr[i] << " "; 
    } 
    return 0; 
}

ผลลัพธ์

Rearrangement of positive and negative numbers using inbuilt sort function is: -3 -1 -1 0 2 4 6

ตัวอย่างโค้ด C++ - ใช้ Recursion

#include <bits/stdc++.h> 
using namespace std; 

void Rotate(int arr[], int first, int last){ 
    while(first < last){ 
        int temp = arr[first]; 
        arr[first] = arr[last]; 
        arr[last] = temp; 
        first++; 
        last--; 
    } 
} 

void Rearrangement(int arr[], int first, int last){ 
    if(first == last){ 
        return; 
    } 
    Rearrangement(arr, (first + 1), last); 
    if(arr[first] >= 0){ 
        Rotate(arr, (first + 1), last); 
        Rotate(arr, first, last); 
    } 
} 

int main(){ 
    int arr[] = {4, 2, -1, -1, 6, -3, 0}; 
    int size = sizeof(arr)/sizeof(arr[0]); 
    int temp = 0; 
    for(int i = 0; i < size; i++){ 
        if(arr[i] < 0){ 
            temp++; 
        } 
    } 
    Rearrangement(arr, 0, (size - 1)); 
    Rotate(arr, temp, (size - 1)); 
    cout << "Rearrangement of positive and negative numbers using Recursion is: "; 
    for(int i = 0; i < size; i++){ 
        cout << arr[i] << " "; 
    } 
    return 0; 
}

ผลลัพธ์

Rearrangement of positive and negative numbers using Recursion is: -1 -1 -3 4 2 6 0