1. Sắp xếp bằng phương pháp chọn lựa (selection sort) a. Ý tưởng:
- Trong dãy n phần tử tìm phẩn tử nhỏ nhất mảng đưa lên vị trí đầu. - Lần lượt đưa ở các vị trí n- 1 đến cuối mảng.
b. Cài đặt:
void selectSort(int a[],int n) { int min; for(int i=0;i<n-1;i++) { min=i; for(int j=i+1;j<n;j++) if(a[j]<a[min])
min=j; //Cap nhat gia tri min Swap(a,i,min);
} }
2. Sắp xếp bằng phương pháp chèn (insertion sort) a. Ý tưởng: a. Ý tưởng:
Để chèn phần tử thứ K+1 vào K phần tử đầu dãy đã có thứ tự chúng ta sẽ tiến hành tìm vị trí đúng của phần tử K+1 trong K phần tử đầu bằng cách vận dụng thuật giải tìm kiếm tuần tự (Sequential Search). Sau khi tìm được vị trí chèn (chắc chắn có vị trí chèn) thì chúng ta sẽ tiến hành chèn phần tử K+1 vào đúng vị trí chèn bằng cách dời các phần tử từ vị trí chèn đến phần tử thứ K sang phải (ra phía sau) 01 vị trí và chèn phần tử K+1 vào vị trí của nó.
b. Cài đặt:
void insertSort(int a[],int n) { int pos,i,x; for(i=1;i<n;i++) { x=a[i]; pos=i-1; while((pos>=0)&&(a[pos]>x)) { a[pos+1]=a[pos]; pos=pos-1; } a[pos+1]=x; } }
3. Sắp xếp bằng phương pháp nổi bột (Bubble sort). a. Ý tưởng: a. Ý tưởng:
Mỗi lần duyệt của vòng lặp trong (biến duyệt j) sẽ làm “nổi” lên trên phần tử nhỏ nhất trong các phần tử được duyệt.
void bubble (int a[n]) { int i, j, temp; for (i = 0; i < n-1; i++) for (j = n-1; j>= i+1; j--) if (a[j-1] > a[j] {
// Đổi chỗ cho a[j] và a[j-1] temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; }
}
4. Sắp xếp bằng phương pháp Quick sort. a. Ý tưởng: a. Ý tưởng:
- Chia mảng làm 3 phần: bên trái, bên phải, ở giữa. - Lấy phẩn tử ở giữa làm trung tâm.
- Phần tử nhỏ hơn ở bên trái và phẩn tử lớn hơn ở bên phải.
b. Cài đặt:
void QuickSort(int a[],int left,int right) {
int mid,i,j;
mid=a[(left+right)/2];
//Lay phan tu giua lam cot moc i=left;j=right; do { while(a[i]<mid) i++; while(a[j]>mid) j--; if(i<=j) { Swap(a,i,j); i++;
j--; }
}while(i<j); if(left<j)
QuickSort(a,left,j); //QuickSort ben trai if(i<right)//neu i<r
QuickSort(a,i,right); // Quick Sort ben phai }