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

Một phần của tài liệu bài thực hành tin học đại cương (Trang 34 - 36)

C ác cách hoán đổi hai số nhập từ bàn phím

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

{ 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);

Input(a,n); start=clock(); QuickSort(a,0,n-1);

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

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> #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 (adsbygoogle = window.adsbygoogle || []).push({});

// 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);

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

}

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();

}

III. Mảng hai chiều

Một phần của tài liệu bài thực hành tin học đại cương (Trang 34 - 36)