Chia sẻ kiến thức ngôn ngữ lập trình C, C++, C#, Java, Python, PHP, JS, SQL ...
Các điều hành viên: Admin, Mod, SMod
gửi bởi nghiammo1992 » 12/09/2021 12:30
Thuật toán sắp xếp theo cơ số Radix Sort (Không hoạt động với mảng chứa số âm)- Mã: Chọn tất cả
using namespace std;
int get_max_element(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] > max)
max = arr[i];
return max;
}
void sort_counting(int arr[], int size, int place) {
int output[size + 1];
int max = (arr[0] / place) % 10;
for (int i = 1; i < size; i++) {
if (((arr[i] / place) % 10) > max)
max = arr[i];
}
int count[max + 1];
for (int i = 0; i < max; ++i)
count[i] = 0;
for (int i = 0; i < size; i++)
count[(arr[i] / place) % 10]++;
for (int i = 1; i < 10; i++)
count[i] += count[i - 1];
for (int i = size - 1; i >= 0; i--) {
output[count[(arr[i] / place) % 10] - 1] = arr[i];
count[(arr[i] / place) % 10]--;
}
for (int i = 0; i < size; i++)
arr[i] = output[i];
}
void sort_radix(int arr[], int size) {
int max = get_max_element(arr, size);
for (int place = 1; max / place > 0; place *= 10)
sort_counting(arr, size, place);
}
int main()
{
int arr[] {32,71,12,45,26,80,53,33,7,99,1,5,2,3,100};
int n = sizeof(arr) / sizeof(arr[0]); sort_radix(arr, n);
cout << "So luong phan tu trong mang: " << n << endl;
for (int i : arr) {
cout << i << " ";
}
return 0;
}
-
nghiammo1992
- ☀️2/30☀️
-
- Bài viết: 15
- Ngày tham gia: 08/03/2012 10:56
- Đến từ: Hà Giang
- Thiết bị: Nokia N96
- Số điện thoại: 0367790762
-
gửi bởi nghiammo1992 » 12/09/2021 12:32
Thuật toán sắp xếp nhanh Quick Sort- Mã: Chọn tất cả
using namespace std;
void quickSort(int Data[], int l , int r)
{
if (l <= r)
{
int key = Data[(l+r)/2];
int i = l;
int j = r;
while (i <= j)
{
while (Data[i] < key)
i++;
while (Data[j] > key)
j--;
if (i <= j)
{
swap(Data[i], Data[j]);
i++;
j--;
}
}
if (l < j)
quickSort(Data, l, j);
if (r > i)
quickSort(Data, i, r);
}
}
int main()
{
int arr[] {32,71,12,45,26,80,53,33,-7,99,1,5,2,-3,-100};
int n = sizeof(arr) / sizeof(arr[0]); quickSort(arr, 0, n-1);
cout << "So luong phan tu trong mang: " << n << endl;
for (int i : arr) {
cout << i << " ";
}
return 0;
}
-
nghiammo1992
- ☀️2/30☀️
-
- Bài viết: 15
- Ngày tham gia: 08/03/2012 10:56
- Đến từ: Hà Giang
- Thiết bị: Nokia N96
- Số điện thoại: 0367790762
-
gửi bởi nghiammo1992 » 12/09/2021 12:34
Thuật toán Counting Sort – Thuật toán sắp xếp đếm phân phối (thuật toán tốt hơn Quick Sort, nhưng tốn bộ nhớ hơn)- Mã: Chọn tất cả
using namespace std;
void counting_sort(int input[], int n)
{
int output[n]; int max = input[0];
int min = input[0];
for(int i = 1; i < n; i++)
{
if(input[i] > max)
max = input[i]; else if(input[i] < min)
min = input[i]; }
int k = max - min + 1; int count_array[k]; fill_n(count_array, k, 0); for(int i = 0; i < n; i++)
count_array[input[i] - min]++; for(int i = 1; i < k; i++)
count_array[i] += count_array[i - 1];
for(int i = 0; i < n; i++)
{
output[count_array[input[i] - min] - 1] = input[i];
count_array[input[i] - min]--;
}
for(int i = 0; i < n; i++)
input[i] = output[i]; }
int main()
{
int arr[] {32,71,12,45,26,80,53,33,-7,99,1,5,2,-3,-100};
int n = sizeof(arr) / sizeof(arr[0]); counting_sort(arr, n);
cout << "So luong phan tu trong mang: " << n << endl;
for (int i : arr) {
cout << i << " ";
}
return 0;
}
-
nghiammo1992
- ☀️2/30☀️
-
- Bài viết: 15
- Ngày tham gia: 08/03/2012 10:56
- Đến từ: Hà Giang
- Thiết bị: Nokia N96
- Số điện thoại: 0367790762
-
gửi bởi nghiammo1992 » 12/09/2021 12:36
Thuật toán sắp xếp trộn Merge Sort (nên ưu tiên dùng thuật toán Quick Sort hơn)- Mã: Chọn tất cả
using namespace std;
void merge(int arr[], int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1+ j];
i = 0; j = 0; k = l; while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1)
{
arr[k] = L[i];
i++;
k++;
}
while (j < n2)
{
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r)
{
if (l < r)
{
int m = l+(r-l)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l, m, r);
}
}
int main()
{
int arr[] {32,71,12,45,26,80,53,33,-7,99,1,5,2,-3,-100};
int n = sizeof(arr) / sizeof(arr[0]); mergeSort(arr, 0, n-1);
cout << "So luong phan tu trong mang: " << n << endl;
for (int i : arr) {
cout << i << " ";
}
return 0;
}
-
nghiammo1992
- ☀️2/30☀️
-
- Bài viết: 15
- Ngày tham gia: 08/03/2012 10:56
- Đến từ: Hà Giang
- Thiết bị: Nokia N96
- Số điện thoại: 0367790762
-
Quay về C, C++, C#, Java, Python, PHP, JS, SQL ...
Đang xem chuyên mục này: Không có thành viên nào đang trực tuyến và 4 khách