Ý tưởng xáo trộn mảng
Sử dụng một tính chất của mảng là: chỉ số của các phần tử trong mảng không được trùng nhau. Do đó phương pháp này sẽ tiến hành theo 2 bước như sau:
- Bước 1: Tạo một mảng số cho trước.
- Bước 2: Duyệt lại mảng trên, tại phần tử ở vị trí thứ i bất kì, hoán đổi giá trị của phần tử ở vị trí thứ i ấy với giá trị của một phần tử ở vị trí thứ j, với j là một vị trí ngẫu nhiên mà vị trí ấy là kết quả của phép chọn ngẫu nhiên giá trị trong khoảng từ i + 1 tới n (n là số lượng phần tử của mảng).
Code xáo trộn mảng bằng C/C++
#include <stdio.h> #include <stdlib.h> #include <time.h> void Swap(int* number_1, int* number_2) { int temp = *number_1; *number_1 = *number_2; *number_2 = temp; } void ShuffleArray(int* arr, int n) { srand(time(NULL)); int minPosition; int maxPosition = n - 1; int swapPosition; int i = 0; while (i < n - 1) { minPosition = i + 1; swapPosition = rand() % (maxPosition - minPosition + 1) + minPosition; Swap(&arr[i], &arr[swapPosition]); i++; } } int main() { int arr[5] = { 1, 2, 3, 4, 5 }; int size = 5; ShuffleArray(arr, size); for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } return 0; }