Lập trình C: QuickSort

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
QuickSort
Quá trình quickSort là phân vùng (). Mục tiêu của phân vùng là đưa ra một mảng và một phần tử của mảng
làm trục, đặt x ở vị trí chính xác và đặt tất cả các phần tử nhỏ hơn x vào trước x,
đặt tất cả các phần tử lớn hơn x vào sau x. Tất cả quy trình được thực hiện lặp đi lặp lại.
 
/* C thực hiện QuickSort */
#include<stdio.h>
  
// Hàm để hoán đổi 2 phần tử
void swap(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
  
/* Hàm này nhận phần tử cuối cùng làm pivot,
đặt phần tử pivot vào đúng vị trí của nó trong mảng đã sắp xếp
và đặt tất cả các phần tử nhỏ hơn (nhỏ hơn pivot) ở bên trái của pivot
và tất cả các phần tử lớn hơn ở bên phải của pivot */
int partition (int arr[], int low, int high)
{
    int pivot = arr[high];    // pivot
    int i = (low - 1);  // chỉ số của phân tử nhỏ hơn
  
    for (int j = low; j <= high- 1; j++)
    {
        // Nếu phân tử hiện tại nhỏ hơn pivot
        if (arr[j] < pivot)
        {
            i++;    // tăng chỉ số của phân tử nhỏ hơn
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return (i + 1);
}
  
/* Thực hiện quickSort
 arr[] --> mang can sap xep,
  low  --> chỉ số bắt đầu,
  high  --> chỉ số kết thúc */
void quickSort(int arr[], int low, int high)
{
    if (low < high)
    {
        /* pi là chỉ số đang phân vùng, arr[p] bây giờ ở đúng vị trí */
        int pi = partition(arr, low, high);
  
        // Sắp xếp riêng biệt các phần tử trước
        // phân vùng và sau phân vùng
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}
  
/* Hiện thị mảng */
void printArray(int arr[], int size)
{
    int i;
    for (i=0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}
  
int main()
{
    int n;
    printf("Enter n: ");scanf("%d",&n);
    int arr[n];
    for(int i=0;i<n;i++){
        printf("a[%d] = ",i+1);scanf("%d",&arr[i]);
    }
    quickSort(arr, 0, n-1);
    printf("Sorted array: \n");
    printArray(arr, n);
    return 0;
}
» Tiếp: Bài toán mã đi tuần
« Trước: Sự khác biệt giữa mã định dạng %d và %i
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!