Sắp xếp chọn (Selection Sort)
Nội dung của giải thuật là lần lượt chọn phần tử nhỏ nhất trong dãy chỉ số k1,k2,..,kn và đổi chỗ cho phần tử ki với i=0,1,2,..,n. Như vậy sau j=n-1 lần chọn, chúng ta sẽ được dãy số sắp xếp thứ tự tăng dần.
Độ phức tạp của giải thuật là n*(n-1)/2
Nguyên tắc sắp xếp ở đây dựa theo kinh nghiệm của người chơi bài. Khi có i-1 lá bài đã được sắp xếp ở trên tay, nay rút thêm lá bài thứ i nữa thì sắp xếp lại thế nào? Có thể so sánh lá bài đó với lá bài thứ i-1,i-2 … để tìm ra chỗ thích hợp và “chèn” nó vào chỗ đó.
Cài đặt minh họa giải thuật #include <cstdlib>
#include <iostream>
using namespace std; void init(int *A, int n); void display(int *A,int n); void insert_sort(int *A,int n);
{
cout<<"Tao lap day so "<<endl; for(int i=0;i<n;i++) { A[i]=rand()%1000; cout<<A[i]<<endl; } }
void insert_sort(int *A,int n) { int tg,j; for(int i=1;i<n;i=i+1) { tg=A[i]; for (j=i-1;j>0&&tg<A[j];j=j-1) { A[j+1]=A[j]; } } A[j+1]=tg; }
void display(int *A,int n) {
cout<<"Hien thi day sau khi sap xep: "<<endl; for(int i=0;i<n;i=i+1)
{
cout<<"Hien thi phan tu thu "<<i<<" cua day so "<<endl; cout<<A[i]<<endl;
}
}
int main(int argc, char *argv[]) {
int *A,n;
cout<<"Nhap vao so phan tu cua mang"<<endl; cin>>n; A=new int[n]; init(A,n); insert_sort(A,n); display(A,n); delete [] A; A=NULL; system("PAUSE"); return EXIT_SUCCESS; }
Trong phương pháp này, bảng các khóa sẽ được duyệt từ đáy lên đỉnh. Dọc đường, nếu gặp hai khóa kế cận ngược thứ tự thì đổi chỗ chúng cho nhau. Như vậy, trong lượt đầu khóa có giá trị nhỏ nhất sẽ được chuyển dần lên đỉnh,khóa có giá trị nhỏ thứ hai sẽ được chuyển lên vị trí thứ hai… Phương pháp này có tên đặc trưng là sắp xếp nổi bọt.
Cài đặt minh họa giải thuật: #include <cstdlib>
#include <iostream>
using namespace std;
void init(int *A, int n) {
cout<<"Tao lap day so "<<endl; for(int i=0;i<n;i++) { A[i]=rand()%1000; cout<<A[i]<<endl; } }
void bubble_sort(int *A,int n) {
int tg;
for(int i=0;i<n-1;i=i+1) for (int j=i+1;j<n;j=j+1) {
{ tg=A[i]; A[i]=A[j]; A[j]=tg; } } }
void display(int *A,int n) {
cout<<"Hien thi day sau khi sap xep: "<<endl; for(int i=0;i<n;i=i+1)
{
cout<<"Hien thi phan tu thu "<<i<<" cua day so "<<endl; cout<<A[i]<<endl;
}
}
int main(int argc, char *argv[]) {
int *A,n;
cout<<"Nhap vao so phan tu cua mang"<<endl; cin>>n;
init(A,n); bubble_sort(A,n); display(A,n); delete [] A; A=NULL; system("PAUSE"); return EXIT_SUCCESS; }