SLIDE1

Sunday, April 5, 2015

thuật toán insertion sort - chèn trực tiếp

thuật toán insertion sort - chèn trực tiếp

Giả sử có một dãy a0 , a1 ,... ,an-1 trong đó i phần tử đầu tiên a0 , a1 ,... ,ai-1 đã có thứ tự.
Tìm cách chèn phần tử  ai vào vị trí thích hợp của đoạn đã được sắp để có dãy mới a0 , a1,... ,ai trở nên có thứ tự. Vị trí này chính là vị trí giữa hai phần tử ak-1 và ak thỏa ak-1 < ai < ak (1≤k≤i).

Bước 1:  i = 1; //giả sử có đoạn a[1] đã được sắp
Bước 2: x = a[i]; Tìm vị trí pos thích hợp trong đoạn a[1] đến a[i-1] để chèn a[i] vào
Bước 3: Dời chỗ các phần tử  từ a[pos] đến a[i-1]   sang phải 1 vị trí để dành chổ cho a[i]
Bước 4: a[pos] = x; //có đoạn a[1]..a[i]  đã được sắp
Bước 5: i = i+1;
Nếu  i < n : Lặp lại Bước 2
Ngược lại  : Dừng

void InsertionSort(int d, int n 
{ int pos, i;
int x;//lưu giá trị a[i] tránh bị ghi đè khi dời chỗ các phần tử.
for(i=1 ; i<n ; i++) //đoạn a[0] đã sắp
{
x = a[i]; pos = i-1;
// tìm vị trí chèn x
while((pos >= 0)&&(a[pos] > x))
{//kết hợp dời chỗ các phần tử sẽ đứng sau x trong dãy mới
a[pos+1] = a[pos];
pos--;
}
a[pos+1] = x; // chèn x vào dãy
}
}

Related Posts:

  • thuật toán interchange sort /*thuật toán interchange sort Ý tưởng: Xuất phát từ đầu dãy, tìm tất các các nghịch thế chứa phần tử này, triệt tiêu chúng bằng cách đổi chỗ 2 phần tử trong cặp nghịch thế. Lặp lại xử lý trên với phần tử kế trong dãy. Bước 1:… Read More
  • thuật toán tìm kiếm tuyến tính cải tiến trên dãy đã sắp xếp thuật toán tìm kiếm tuyến tính cải tiến trên dãy đã sắp xếp #include<iostream> using namespace std; int tim(int *a,int n,int x) { int i=0; while(a[i]!=x && i<n) i++; if(i==n) return 0; return i; } int t… Read More
  • thuật toán selection sort /*thuật toán selection sort Ý tưởng: Chọn phần tử nhỏ nhất trong N phần tử trong dãy hiện hành ban đầu. Đưa phần tử này về vị trí đầu dãy hiện hành Xem dãy hiện hành chỉ còn N-1 phần tử của dãy hiện hành ban đầu Bắt đầu từ vị… Read More
  • thuật toán tìm kiếm nhị phân/*thuật toán tìm kiếm nhị phân Được áp dụng trên mảng đã có thứ tự. Ý tưởng: . Giả xử ta xét mảng có thứ tự tăng, khi ấy ta có ai-1<ai<ai+1 Nếu X>ai thì X chỉ có thể xuất hiện trong đoạn [ai+1, an-1] Nếu X<ai thì … Read More
  • thuật toán tìm kiếm tuyến tính/*thuật toán tìm kiếm tuyến tính Cho danh sách có n phần tử a0, a1, a2…, an-1. Để đơn giản trong việc trình bày giải thuật ta dùng mảng 1 chiều a để lưu danh sách các phần tử nói trên trong bộ nhớ chính. Tìm phần tử có khoá b… Read More