Minh họa thuật toán chèn trực tiếp

Một phần của tài liệu Cấu trúc dữ liệu và giải thuật (Trang 44 - 46)

Cài đặt:

void insertionSort(int d, int n ){ int p o s , i ;

int x;//lưu giá trị a[i] tránh bị ghi đè khi dài chỗ for(i = 1 ; i < n ; i++){ //doạn a[0] đã sắp

X = a[i]; pos = i-1; // tìm vị tri chèn X while ((pos >= 0)&&(a[pos] > x) ) {

//dài chỗ các pt sẽ dứng sau X trong dãy mòi a[pos+l] = a[pos];

pos— ;

}

a[pos+l] = x; // chèn X vào dày

} }

2.3. Chọn trực tiếp (Selection Sort)

2.3.1. Ý tưởng thuật toán

Ta chọn phần tử nhỏ nhất trong N phần tử ban đầu, đưa phần tử này về hiện hành. Sau đó, ta khơng quan tâm đến nó nữa, ta xem dãy hiện hành chỉ

1 phần tử của dãy ban đầu tính từ vị trí thứ 2. Cứ vậy, cho đến khi dãy hi chỉ còn 1 phần tử, ta được 1 dãy sắp tăng.

Các bước tiến hành như sau:

Bước 1: Khởi động i = 0

Bước 2: Tim phần từ nhỏ nhất a[min] trong dãy hiện hành từ a[i] đến a[N- 1]

Bước 3: Hoán vị a[min] và a[i] Bước 4: i = i+1

■ Nếu i < N -1: quay trở lại bước 2 ■ Ngược lại: STOP!

2.3.2. Ví dụ minh họa

Cho dãy số a: 12 2 8 5 1 6 4 15

Sắp xếp dãy sổ trên tăng dần với các bước của thuật toán được thể hiện như đầu dãy

còn N- ện hành

Cài đặt:

void selectionSort(int a[],int n ){

int min, i, j; //chi số phần tử nhỏ nhất trong dãy hiện hành

for (i = 0; i < n-1 ; i++) { min = i ;

for(j = i + 1; j < n ; j++) if (a[j ] < a[min])

min = j ; //luu vị tri phần tử hiện nhỏ nhất swap(a[min],a[i]) ;

} }

2.4. Nổi bọt (Buble Sort)2.4.1. Ý tưởng thuật toán 2.4.1. Ý tưởng thuật toán

❖ Xét từ đáy và phần tử nhẹ nổi lên trên. ❖ Các bước thực hiện:

Bước 1: Khởi động i = 0

Bước 2: j = N -1 //Duyệt từ cuối dãy về vị trí i Trong khi j > i thực hiện:

■ Nếu a[j] < a[j-l]: hoán vị a[j], a[i-1 ]

" j = j - 1 Bước 3: i = i + 1

■ Nếu i < N -1: quay trở lại bước 2. ■ Ngược lại: STOP!

Một phần của tài liệu Cấu trúc dữ liệu và giải thuật (Trang 44 - 46)

Tải bản đầy đủ (PDF)

(156 trang)