# data[].attributes.body
·       Chọn một phần tử trong mảng làm điểm đánh dấu(pivot). Có các cách chọn :

-      Luôn chọn phần tử đầu tiên của mảng.

-      Luôn chọn phần tử cuối cùng của mảng. ( * thường được sử dụng)

-      Chọn một phần tử random.

-      Chọn một phần tử có giá trị nằm giữa mảng(median element).

·       Di chuyển tất cả các phần tử của mảng mà nhỏ hơn x sang bên trái vị trí của x

·       Di chuyển tất cả các phần tử của mảng mà lớn hơn x sang bên phải vị trí của x.

→ Ta sẽ có 2 mảng con: mảng bên trai của x và mảng bên phải của x. Tiếp tục công việc với mỗi mảng con(chọn pivot, phân đoạn) cho tới khi mảng được sắp xếp.

# data[].attributes.attachment_link.readable_text
#include<stdio.h>
void printArray(int arr[], int size) {
	printf("\n	");
    int i;
    for (i=0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n\n");
}
void hoanvi(int &a, int &b) {
	printf("|| hoan vi %d voi %d ",a,b);
    int t = a;
    a = b;
    b = t;
}
int partition (int arr[], int low, int high) {
    int pivot = arr[high];
	printf("	pivot = %d ",pivot);    
    int left = low;
    int right = high - 1;
    while(true){
        while(left <= right && arr[left] < pivot) 
			left++;
        while(right >= left && arr[right] > pivot) 
			right--;
        if (left >= right) 
			break;
        hoanvi(arr[left], arr[right]);
        left++;
        right--;
    }
    hoanvi(arr[left], arr[high]);
    printArray(arr,8);    
    return left;
}
 void quickSort(int arr[], int low, int high) {
    if (low < high)
    {
        int pi = partition(arr, low, high);
 
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}
int main() {
    int arr[] = {35, 33, 42, 10, 14, 19, 33, 44, 35};
    int n = sizeof(arr)/sizeof(arr[0]);
    printf("Day so truoc khi sap xep");
    printArray(arr,n);
    printf("minh hoa thuat toan\n");
    quickSort(arr, 0, n-1);
    printf("Da so sau khi sap xep: ");
    printArray(arr, n);
    return 0;
}

# data[].attributes.body
-         Dựa trên giải pháp chia để trị.

-         Chia chuỗi thành hai nửa, tiếp tục lặp lại công việc này ở 2 chuỗi đã chia.

-         Sau đó kết hợp lại với nhau thành một chuỗi đã được sắp xếp.