II.2 2 Sử Quicksort tự viết Ví dụ 1: Sắp xếp dãy số tăng dần

Một phần của tài liệu Cac-bai-thuc-hanh-Ky-thuat-Lap-trinh-2021-2022 (Trang 33 - 36)

Ví dụ 1: Sắp xếp dãy số tăng dần Chương trình: #include<stdio.h> #include<conio.h> #include<time.h> #include<stdlib.h>

void Input(int a[], int n) { int i; for(i=0;i<n;i++) { a[i]=rand()%1000+1; } }

void Swap(int *a,int *b){ int tmp =*a;

Nguyễn Văn Nguyên Bài thực hành Tin học Đại cương 34

*a=*b; *b=tmp; }

void QuickSort(int a[], int left, int right) {

int i = left, j = right;

int pivot = a[(left + right) / 2]; // Lay pivot là phan tu giua do

{

// Tìm vi trí i, j can hoán vi

while (a[i] < pivot && i < right) i++; while (a[j] > pivot && j > left) j--; if (i <= j) { Swap(&a[i], &a[j]); i++; j--; } } while (i <= j);

// Khi dó pivot se chot vi trí trong mang

// Ta can goi ham de quy den 2 mang con bên trái pivot và bên phai pivot if (left < j) QuickSort(a, left, j);

if (i < right) QuickSort(a, i, right); }

void Output(int a[], int n) { int i;

for(int i=0;i<n;i++) printf("%10d",a[i]); }

int main(){ int a[10000]; int n;

clock_t start,end;

printf("nhap so luong phan tu :"); scanf("%d",&n); Input(a,n); start=clock(); QuickSort(a,0,n-1); end=clock(); Output(a,n);

printf("\nXung bat dau: %ld",start); printf("\nXung ket thuc: %ld",end); getch(); } Ví dụ 2: Sắp xếp dãy số giảm dần Chương trình: #include<stdio.h> #include<conio.h>

Nguyễn Văn Nguyên Bài thực hành Tin học Đại cương 35

#include<time.h> #include<stdlib.h>

void Input(int a[], int n) { int i; for(i=0;i<n;i++) { a[i]=rand()%1000+1; } }

void Swap(int *a,int *b){ int tmp =*a;

*a=*b; *b=tmp; }

void QuickSort(int a[], int left, int right) {

int i = left, j = right;

int pivot = a[(left + right) / 2]; // Lay pivot là phan tu giua do

{

// Tìm vi trí i, j can hoán vi

while (a[i] > pivot && i < right) i++; while (a[j] < pivot && j > left) j--; if (i <= j) { Swap(&a[i], &a[j]); i++; j--; } } while (i <= j);

// Khi dó pivot se chot vi trí trong mang

// Ta can goi ham de quy den 2 mang con bên trái pivot và bên phai pivot

if (left < j) QuickSort(a, left, j); if (i < right) QuickSort(a, i, right); }

void Output(int a[], int n) { int i;

for(int i=0;i<n;i++) printf("%10d",a[i]); }

int main(){ int a[10000]; int n;

clock_t start,end;

printf("nhap so luong phan tu :"); scanf("%d",&n);

Một phần của tài liệu Cac-bai-thuc-hanh-Ky-thuat-Lap-trinh-2021-2022 (Trang 33 - 36)

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

(38 trang)