Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Sắp xếp mảng sao cho mọi phần tử chỉ số lẻ lớn hơn phần tử trước trong C++


Cho mảng nguyên dương arr[]. Nhiệm vụ: sắp xếp mảng sao cho phần tử ở chỉ số lẻ (1,3,5...) lớn hơn phần tử ở chỉ số chẵn ngay trước nó (0,2,4...).

Các trường hợp đầu vào/đầu ra

Đầu vào - int arr[] = {2, 1, 5, 4, 3, 7, 8}

Đầu ra - Mảng trước: 2 1 5 4 3 7 8. Sắp xếp chỉ số lẻ > trước: 1 4 2 5 3 8 7

Giải thích - Mảng size 7. Hoán đổi cặp (0,1), (2,3), (4,5) nếu vi phạm, sau đó kiểm tra cặp (6,5) nếu size lẻ: 1 4 2 5 3 8 7.

Đầu vào - int arr[] = {3, 2, 6, 9}

Đầu ra - Mảng trước: 3 2 6 9. Sắp xếp chỉ số lẻ > trước: 2 3 6 9

Giải thích - Mảng size 4. Hoán đổi (0,1) vì 3>2 → 2 3 6 9. Không cần thêm hoán đổi.

Phương pháp sử dụng trong chương trình dưới đây

  • Nhập mảng, tính size. In mảng trước.

  • Gọi Rearrangement(arr, size).

  • Trong Rearrangement:

    • ptr = size-1.

    • For i=0; i arr[i+1] → swap(arr[i], arr[i+1]).

    • Nếu size lẻ (size&1): for i=ptr; i>0; i-=2: nếu arr[i] > arr[i-1] → swap(arr[i], arr[i-1]).

  • In mảng sau sắp xếp.

Ví dụ mã

#include <iostream> using namespace std; void Rearrangement(int arr[], int size){    int ptr = size - 1;    for(int i = 0; i < ptr; i = i+2){       if(arr[i] > arr[i+1]){          swap(arr[i], arr[i+1]);       }    }    if(size & 1){       for(int i = ptr; i > 0; i = i-2){          if(arr[i] > arr[i-1]){             swap(arr[i], arr[i-1]);          }       }    } } int main(){    int arr[] = {2, 1, 5, 4, 3, 7, 8};    int size = sizeof(arr) / sizeof(arr[0]);    cout<<"Mảng trước: ";    for (int i = 0; i < size; i++){       cout << arr[i] << " ";    }    Rearrangement(arr, size);    cout<<"\nSắp xếp chỉ số lẻ lớn hơn trước: ";    for(int i = 0; i < size; i++){       cout<< arr[i] << " ";    }    return 0; }

Đầu ra

Nếu chạy mã trên sẽ cho kết quả:

Mảng trước: 2 1 5 4 3 7 8 Sắp xếp chỉ số lẻ lớn hơn trước: 1 4 2 5 3 8 7