Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Viết chương trình nhập mảng n số nguyên với các giá trị ngẫu nhiên. Xuất tổng, tìm giá trị nhỏ nhất và sắp xếp mảng.

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Bài giải

-------------------- ######## --------------------

Trong bài tập này tôi dùng phương pháp sắp xếp Exchange sort để sắp xếp các phần tử trong mảng theo thứ tự giảm dần. Sau khi đã có được mảng giảm dần thì phần tử nhỏ nhất chính là phần tử cuối cùng trong mảng. 

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Bài giải

public static void main(String[] args) { int n, sum = 0, tempSort; Scanner scanner = new Scanner(System.in); do { System.out.println("Nhập vào số phần tử của mảng: "); n = scanner.nextInt(); } while (n < 0); // khởi tạo và cấp phát bộ nhớ cho mảng int array[] = new int[n]; System.out.println("Nhập các phần tử cho mảng: "); for (int i = 0; i < n; i++) { System.out.print("Nhập phần tử thứ " + i + ": "); array[i] = scanner.nextInt(); } // Hiển thị mảng vừa nhập System.out.println("\nMảng ban đầu: "); for (int i = 0; i < n; i++) { System.out.print(array[i] + "\t"); } // tính tổng các phần tử có trong mảng for (int i = 0; i < n; i++) { sum += array[i]; } System.out.println("\nTổng các phần tử có trong mảng = " + sum); // sắp xếp theo thứ tự giảm dần for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j <= n - 1; j++) { if (array[i] < array[j]) { tempSort = array[i]; array[i] = array[j]; array[j] = tempSort; } } } System.out.println("Mảng sau khi sắp xếp là: "); for (int i = 0; i < n; i++) { System.out.print(array[i] + "\t"); } // tìm phần tử nhỏ nhất // sau khi sắp xếp theo thứ tự giảm dần // thì phần tử nhỏ nhất là phần tử cuối cùng trong mảng System.out.println("\nPhần tử nhỏ nhất trong mảng là " + array[n - 1]); }

Kết quả sau khi biên dịch chương trình:

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Viết hàm sắp xếp mảng theo thứ tự tăng dần của các phần tử số nguyên tố.

Hướng dẫn

Bài tập mang tính tham khảo, hỗ trợ các bạn làm quen và luyện tập với các bàn toán lập trình cơ bản trong C++.

Kteam khuyến khích các bạn tự phân tích đề bài > tự giải bài toán > debug để kiểm tra kết quả và fix lỗi trong quá trình giải. Sau đó, bạn có thể tham khảo source code mẫu để hoàn chỉnh bài tập. 

Để được hỗ trợ tốt nhất, bạn có thể đặt câu hỏi ở phần bình luận bên dưới bài viết hoặc ở mục Hỏi & Đáp.

Source

// viet ham sap xep mang theo thu tu tang dan cua cac phan tu so nguyen to. #include<iostream> #include<time.h> #define MAX 100 using namespace std; void NhapMang(int a[], int n) { for(int i=0; i<n; i++) { cout<<"Phan tu thu "<< i <<": "; cin>> a[i]; } } void MangNgauNhien(int a[], int n) { srand((unsigned)time(NULL)); for(int i=0; i<n; i++) a[i]=rand()%100 - rand()%100; } void XuatMang(int a[], int n) { for(int i=0; i<n; i++) cout<<a[i]<<"\t"; } void HoanVi(int &x, int &y) { int q=x; x=y; y=q; } bool KiemTraSNT(int x) { if(x<2) return false; for(int i=2; i<x/2; i++) if(x%i==0) return false; return true; } void SapXepTangDanSNT(int a[], int n) { int i, j; cout<<"\nMang so nguyen to tang dan: \n"; for(i=0; i<n-1; i++) for(j=i+1; j<n; j++) if(a[i]>a[j] && KiemTraSNT(a[i])==true && KiemTraSNT(a[j])==true) HoanVi(a[i],a[j]); } void main() { int a[MAX], n; cout<<"Nhap so luong thuc cua mang: "; cin>>n; NhapMang(a,n); //MangNgauNhien(a,n); XuatMang(a,n); SapXepTangDanSNT(a,n); XuatMang(a,n); cout<<endl; }

Kết luận

Bạn có thể củng cố kiến thức C++ từ khóa Lập trình C++ cơ bản.

Hoặc tìm hiểu thêm các bài tập khác trong khóa Bài toán kinh điển trong lập trình

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.

Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Cách sắp xếp dãy số nguyên, mảng một chiều theo thứ tự tăng dần, giảm dần trong C / C++. Cách sắp xếp dãy số thực char, mảng số nguyên n nhập vào từ bàn phím.

1. Giới thiệu bài toán sắp xếp

Bài toán sắp xếp là bài toán cơ bản và cực kì quan trọng, nó là một giải thuật cơ bản mà bất kì lập trình viên nào cũng cần phải biết, cùng tìm hiểu bài toán này nhé!

Dạng đề bài cho bài toán này chúng ta sẽ thường xuyên gặp phải. Các giải thuật để giái quyết bài toán có thể sử dụng ở cả hiện tại và sau này, chình vì vậy người ta mới nói đây là một bài toán quan trọng.

Khi nhắc đến sắp xếp dãy số, bạn liền phải nghĩ đó là cấu trúc mảng. Các dạng đề như sắp xếp dãy số nguyên, mảng số thực theo chiều tăng/ giảm đều là biến thể của bài toán này.

Đối với bài tập nhập môn thường sẽ là: Nhập một dãy số có N phần từ, N nhập vào từ bàn phím. Sắp xếp dãy số đó . . .

Xem thêm các bài viết về cấu trúc giữ liệu và thuật toán.

2. Cách sắp xếp dãy số

Chính vì bài toán sắp xếp là dạng bài kinh điển nên có rất nhiều thuật toán sắp xếp khác nhau như:

Thuật toán thường được nhiều người, thầy cô sử dụng nhất khi mới học đó chính là sắp xếp chọn.
Sắp xếp chọn lấy ý tưởng đó là: Sau mỗi lần lặp ta sẽ tìm được một phần tử đúng vị trí. Bạn có thể xem hình minh họa dưới:

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Trong bài viết này mình sẽ sử dụng luôn thuật toán này.

2.1 Hàm sắp xếp dãy số tăng dần C/C++

Nếu bạn đang tìm cách sắp xếp các kí tự kiểu char, bạn cũng có thể sử dụng các này nhé!

Ở đây mình sẽ viết thành hàm cho dễ sử dụng nhé. hàm swap do mình viết ra có tác dụng đổi chỗ hai phần tử cho nhau.

// Ham doi vi tri hai phan tu void swap(int &a, int &b){ int temp =a; a=b; b=temp; } // Ham sap xep tang void sortArrTang(int a[], int n){ for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++){ if(a[i]>a[j]){ swap(a[i], a[j]); } } }

Giải thích: Nếu cần sắp xếp mảng có n phần tử. Ta chỉ cần thực hiện n-1 lần chọn, bởi vì phần tử cuối cùng đã tự đúng vị trí nên trong vòng lặp for đầu tiên i<n-1.

Trong vòng lặp thứ 2: Ta sẽ chạy từ vị trí j = i+1 đến cuối mảng, tức là từ sau i đến hết mảng. Nếu có phần từ nào nhỏ hơn a[i] thì ta đổi chỗ. Như vậy sau vòng lặp đầu tiên ta sẽ tìm được phần từ nhỏ nhất của mảng. Cứ như vậy

2.2 Hàm sắp xếp giảm

Sắp xếp giảm cơ bản giống với phần trên. Chỉ cần thay đổi điều kiện là nếu a[i]<a[j] thì đổi chỗ. Sau vòng lặp đầu tiên, vị trí a[0] sẽ là phần tử lớn nhất.

// Ham sap xep giam void sortArrGiam(int a[], int n){ for(int i=0;i<n-1;i++) for(int j=i;j<n;j++){ if(a[i]<a[j]){ // doi cho hai phan tu khong dung ham swap() int temp=a[i]; a[i]=a[j]; a[j]=temp; } } }

3. Sắp xếp dãy số nguyên có N phần tử

Phần này mình sẽ viết full code về sắp xếp một dãy số nguyên có n phần tử theo chiều tăng dần, giảm dần, n nhập vào từ bàn phím. Mời bạn tham khảo:

/* Code by duongdinh24.com Github: https://github.com/duongdinh24/ */ #include<iostream> using namespace std; // Ham doi vi tri hai phan tu void swap(int &a, int &b){ int temp =a; a=b; b=temp; } // Ham sap xep tang void sortArrTang(int a[], int n){ for(int i=0;i<n-1;i++) for(int j=i;j<n;j++){ if(a[i]>a[j]){ swap(a[i], a[j]); } } } // Ham sap xep giam void sortArrGiam(int a[], int n){ for(int i=0;i<n-1;i++) for(int j=i;j<n;j++){ if(a[i]<a[j]){ int temp=a[i]; a[i]=a[j]; a[j]=temp; } } } // Ham nhap mang void inputArr(int a[], int n){ for(int i=0;i<n;i++) cin>>a[i]; } // Ham xuat mang void printArr(int a[], int n){ for(int i=0;i<n;i++) cout<<" "<<a[i]; } int main(){ int n; // Nhap so luong phan tu mang do{ cout<<"Nhap n: "; cin>>n; } while(n<=0); // Neu n<=0 thi nhap lai int a[n]; // khai bao mang a co n phan tu inputArr(a,n); // Goi ham nhap mang sortArrTang(a, n); // Goi ham sap xep cout<<"Mang sau khi sap xep tang dan: "<<endl; printArr(a, n); return 0; }

Ví dụ sắp xếp theo thứ tự tăng dần:

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Ví dụ hàm sắp xếp giảm:

Nhập vào từ bàn phím mảng nguyên gồm n phần tử sap xếp mảng vừa nhập theo chiều tăng dần

Bài viết của mình đến đây là hết. Bạn đọc có ý kiến đóng góp hay thắc mắc gì nhớ để lại comment phía dưới nhé!

Like và chia sẻ chúng cho bạn bè nếu bạn thấy bài viết hữu ích!
Cảm ơn bạn ghé thăm blog duongdinh24.com
Chúc bạn thành công !