Search…

Xáo Trộn Một Mảng Cho Trước

15/09/20201 min read
Hướng dẫn xây dựng thuật toán xáo trộn mảng dành cho C/C++

Ý 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;
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024