Mô tả bài toán: cho 2 danh sách A và B lần lượt có m và n phần tử đã sắp xếp theo thứ tự. Bài toán đặt ra trộn 2 danh sách A và B với nhau thành danh sách C cũng là một danh sách có thứ tự.
Thuật toán:
Bước 1 :khởi tạo ba chỉ số chạy trong vòng lặp i = 0, j = 0, k = 0 tương ứng cho ba mảng A, B và C.
Bước 2: tại mỗi bước nếu cả hai chỉ số (i<m và j<n ) ta chọn min(A[i],B[j]) và lưu nó vào trong C[k]. Chuyển sang Bước 4.
Bước 3: tăng giá trị k lên 1 và quay về Bước 2.
Bước 4: sao chép tất cả các giá trị còn lại từ các danh sách mà chỉ số còn vi phạm (tức i<m hoặc j<m) vào trong mảng C.
Cài đặt thuật toán:
#include<math.h>
#include<iostream>
#include<conio.h>
#define max 100
using namespace std;
//Nhập mảng
void NhapMang(int A[],int n){
for(int i=0; i<n; i++) {
cout<<"nhap Phan tu thu A["<<i<<"] =";
cin>>A[i];
}
}
//Xuất mảng
void XuatMang(int A[],int n){
cout<<endl;
for(int i=0; i<n; i++)
cout<<A[i]<<"\t";
}
//Hoán vị 2 phần tử
void Swap(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
void MergeSort(int m, int n, int &k, int A[], int B[], int C[]) {
int i = 0, j = 0;
k = 0;
while (i < m && j < n) {
if (A[i] <= B[j]) {
C[k] = A[i];
i++;
}else {
C[k] = B[j];
j++;
}
k++;
}
if (i < m){
for (int p = i; p < m; p++){
C[k] = A[p];
k++;
}
} else {
for (int p = j; p < n; p++) {
C[k] = B[p];
k++;
}
}
}
//Chương trình chính
int main(){
int A[max],B[max],C[max],n,m,k;
cout<<"m = "; cin>>m;
cout<<"n = "; cin>>n;
cout<<"Nhap danh sach co thu tu A:\n";
NhapMang(A,m);
cout<<"Nhap danh sach co thu tu B:\n";
NhapMang(B,n);
cout<<"\nSap xep tron 2 mang A, B\n";
MergeSort(m,n,k,A,B,C);
XuatMang(C,k);
getch();
return 0;
}
Kết quả chạy chương trình:
Từ khóa: Sắp xếp, thuật toán, chèn, insert, insertion sort, sắp xếp chèn, giải thuật, cấu trúc dữ liệu và giải thuật, sắp xếp nhanh, quick sort, sắp xếp vun đống, heap sort, merge sort
Related Post:
Shell: Viết script in ra chuỗi đảo ngược từ chuỗi ban đầu. Ví dụ: Chuỗi ban đầu: 123. Chuỗi đảo ngược: 321.clearecho -e -n "Nhap chuoi:\t"read sauh=${#sau}until [ $h -le 0 ]do echo -n `expr substr $sau $h 1` h=$(($h - 1))done echo -e "\n"Tags: Lập trình Shell, lập trình Linux, Ub… Read More
Shell: Viết Script giải hệ phương trình bậc nhất 2 ẩn.Ax + By = CA1x + B1y = C1hpt(){ D=$(echo "scale=3; $1 * $5 - $2 * $4" | bc) Dx=$(echo "scale=3; $3 * $5 - $2 * $6" | bc) Dy=$(echo "scale=3; $1 * $6 - $3 * $4" | bc) &… Read More
Shell: Viết script tìm số lớn nhất, nhỏ nhất trong 3 số được nhập từ dòng lệnhcleardeclare -a aa=( [0]=$1 [1]=$2 [2]=$3 )max=${a[0]}min=${a[0]}l=${#a[*]}for ((i=0;i<$l;i++))do if [ $max -le ${a[i]} ];then max=${a[i]} else &… Read More
Shell: Viết Script tính tổng các số lẻ từ 1-n (n nguyên, nhập từ bàn phím)clearecho "n="read ni=1tong=0while [ $i -lt $n ]do if [ `expr $i % 2` -ne 0 ]; then tong=`expr $tong + $i` fi i=`expr $i + 1`doneecho "tong la: $tong"Tags: Lập trình Shell, lập trình Linux, Ubuntu, Script tính tổng lẻ… Read More
Shell: Viết script tính tổng các chữ số của 1 số nguyên được nhập vào từ bàn phím.cleart=1while [ $t -eq 1 ]do clear echo -e -n "Nhap so:\t" read so if [ ${#so} -eq 3 ]; then &n… Read More
Shell: Viết chương trình Shell giải phương trình bậc nhất : Ax + B = 0 (a, b nguyên, nhập từ bàn phím)clearecho "Chuong trinh giai phuong trinh bac nhat"echo "Nhap gia tri a = " read aecho "Nhap gia tri b = "read bif [ $a -eq 0 ];then if [ $b -eq 0 ];then echo "Phuong… Read More
Klik untuk melihat kode: