Computer >> Máy Tính >  >> Lập trình >> C ++

Mã C ++ để đếm các hoạt động để sắp xếp mảng

Giả sử chúng ta có một mảng A với n phần tử (n là số lẻ). A chứa một hoán vị của các số tự nhiên đầu tiên. Giả sử có một hàm f (i) điều này nhận một đối số i trong phạm vi 0 đến n-2 và thực hiện phép toán:nếu A [i]> A [i + 1], hãy hoán đổi các giá trị của A [i] và A [ i + 1]. Chúng ta phải đếm số lần lặp để sắp xếp mảng A, lần đầu tiên.

Vì vậy, nếu đầu vào là A =[4, 5, 7, 1, 3, 2, 6], thì đầu ra sẽ là 5, bởi vì mảng trạng thái sau mỗi lần lặp là:[4, 5, 1, 7, 2, 3, 6], [4, 1, 5, 2, 7, 3, 6], [1, 4, 2, 5, 3, 7, 6], [1, 2, 4, 3, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7].

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

 n:=size of Af:=0Ans:=0 để khởi tạo Ans:=0, do:f:=0 để khởi tạo j:=0, khi j  A [j + 1], thì:f:=1 nếu không f khác 0, thì:Ra khỏi vòng lặp để khởi tạo j:=(Ans AND 1), khi j  A [j + 1], sau đó:hoán đổi A [j] và A [j + 1] (tăng Ans lên 1) trả về Ans  

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 #include  using namespace std; int Giải (vector  A) {int n =A.size (); bool f =0; int Ans =0; for (Ans =0;;) {f =0; for (int j =0; j  A [j + 1]) f =1; if (! f) break; for (int j =(Ans &1); j  A [j + 1]) swap (A [j], A [j + 1]); Ans ++; } return Ans;} int main () {vector  A ={4, 5, 7, 1, 3, 2, 6}; cout < 

Đầu vào

 {4, 5, 7, 1, 3, 2, 6} 

Đầu ra

 5