PDA

View Full Version : [DIS] Phân biệt



assault
16-12-2002, 10:53
Hi ,mình có 1 đề bài nhưng lại có 2 bài trả lời,mình thấy phương án 2 phức tạp hơn,nhưng không hiểu ,mong các bạn nào hiểu có thể giải thích dùm.
Thanks

1-----------------

#include <stdio.h>

#define MAX 100

void main()
{
int day[MAX], i, n, j, tam;

printf("\nCho biet so phan tu cua day : ");
scanf("%d", &n);
printf("Nhap vao cac phan tu : ");
for (i=0; i<n; i++)
scanf("%d", &day[i]);
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (day[j] < day[i])
{
tam = day[i];
day[i] = day[j];
day[j] = tam;
}
printf("\nSau khi sap xep : ");
for (i=0; i<n; i++)
printf("%d ", day[i]);
getch();
}

2------------------

#include <stdio.h>
#include <mem.h>

#define MAX 100

void main()
{
int day[MAX], n, i, j, tam;

printf("\nCho biet so phan tu cua day : ");
scanf("%d", &n);
printf("Nhap vao cac phan tu : ");
for (i=0; i<n; i++)
{
scanf("%d", &tam);
j = 0;
while (j<i && day[j]<tam)
j++;
if (j<i)
memmove(&day[j+1], &day[j], (i-j)*sizeof(int));
day[j] = tam;
}
printf("\nSau khi nhap : ");
for (i=0; i<n; i++)
printf("%d ", day[i]);
getch();
}

White_Rose
16-12-2002, 13:13
Cách thứ nhất, toàn bộ phần tử mảng được nhập vào. Sau đó sử dụng thuật toán sắp xếp kiểu nổi bọt để sắp xếp dãy.

Cách thứ hai, mỗi khi có một phần tử của mảng được nhập vào, tính toán ngay ra vị trí của nó. Sau đó, chuyển tất cả các phần tử từ vị trí này trong mảng hiện tại ra sau một vị trí nhờ hàm memmove. Chẳng hạn, mảng ban đầu là
1 3 5 8 9
bạn nhập thêm số 7
chương trình sẽ tính ra vị trí cần chèn số 7 là vị trí thứ 4 (index trong mảng là 3 vì C coi index phần thử đầu tiên là 0).
Sau đó, chuyển mọi phần tử từ vị trí thứ 4 trở đi lui về sau một vị trí. mảng sẽ như sau:
1 3 5 [] 8 9
Cuối cùng, gía trị nhập được đưa vào mảng, mảng trở thành
1 3 5 7 8 9

Cách thứ 2 vừa phức tạp, vừa chẳng nhanh hơn mấy. Tốt nhất bạn dùng cách đầu hoặc dùng sắp xếp với thuật toán QuickSort (trong C có sẵn thư viện cung cấp function này, bạn không cần biết vẫn sử dụng được lol )

assault
17-12-2002, 20:40
Cảm ơn,mình có tìm được 1 tài liệu nói về vấn đề này rồi ,thật giống như bạn.
See you soon