PDA

View Full Version : [3Xin giúp] Lập trình Cấu trúc dữ liệu C++



YoYoHomeZone
05-01-2010, 09:51 PM
Mình đang học cái môn lập trình C++. Ai giúp mình với

Đề bài:

Tính thời gian của các hàm sắp xếp: Bubble Sort, interchangeSort...

Theo thầy nói thì dùng hàm gettime để làm nhưng mình hổng biết cái cấu trúc đó làm như thế nào và đặt hàm đó ở đâu thì nó mới đếm được thời gian từ khi bắt đầu đến kết thúc cả. Hu hu hu. T2 chấm điểm rồi.

YoYoHomeZone
07-01-2010, 03:45 PM
Hổng ai giúp mình sao? Buồn quá đi mất.

MstariO
07-01-2010, 03:55 PM
Hok phải hok ai giúp mà chắc chưa bik đó ban ơi! mà mình nghĩ nó tùy vào dãy số bạn nhập mà thời gian dài hay ngắn nói zday thui chứ hoc ngu lém hok bik ji` dau !!!

free_wind
07-01-2010, 09:56 PM
Interchange Sort là gì mình không biết, chỉ biết có Insertion Sort thôi =.="

tạm thời mình làm 1 cái demo thế này, bạn muốn hỏi gì thì cứ nói =.="

bạn sửa lại dòng 5 (#define NUM_TEST 50000) để xác định số phần tử sẽ được dùng trong bài test

chương trình dịch trên cygwin gcc tốt, ở máy của mình chạy thì sắp xếp một dãy có 25000 phần tử mất 5s, 50000 phần tử mất 22s, 75000 phần tử mất 49s



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

#define NUM_TEST 50000

/*
Doan code bubble sort duoc lay ve tu http://mattmcveigh.co.uk/bubbleSort.php
da duoc chinh sua mot it de phu hop hon voi yeu cau

void bubbleSort ( int arrayToSort[], int n)
input:
int* arrayToSort: la mot chuoi chua duoc sap xep
int n: chua so phan tu trong arrayToSort
output
int* arrayToSort se co thu tu
*/

void bubbleSort ( int arrayToSort[], int n)
{
int temporaryStorage;
int test;
register int loopCount;

do
{
test = 0;
for ( loopCount = 0; loopCount < n; loopCount++ )
{
if ( arrayToSort[loopCount] > arrayToSort[loopCount + 1] )
{
temporaryStorage = arrayToSort[loopCount];
arrayToSort[loopCount] = arrayToSort[loopCount + 1];
arrayToSort[loopCount + 1] = temporaryStorage;

test = 1;
}
}
} while ( test != 0 );
}

int main()
{
time_t timer;
int arrayToSort[NUM_TEST]; // day co 50000 phan tu
int nCounter;

// khoi tao mang, o day su dung ngau nhien
for ( nCounter = 0; nCounter < NUM_TEST; nCounter++)
arrayToSort[nCounter] = rand();

// ghi lai thoi gian
timer = time(NULL);
// bat dau thuc hien sap xep
bubbleSort(arrayToSort, NUM_TEST);

// ghi lai thoi gian ket thuc
timer = time(NULL) - timer;

// xuat ket qua ra man hinh
printf("%d\n", timer);

return 0;
}

sun_9x
09-01-2010, 11:23 PM
hix, tui học CNTT nè, mà lập trình thua! hix nhập môn còn rớt lên rớt xuống huống j mấy cái này :-ss

Tokiya Mikagami
10-01-2010, 07:53 AM
Interchange Sort là gì mình không biết, chỉ biết có Insertion Sort thôi =.="

tạm thời mình làm 1 cái demo thế này, bạn muốn hỏi gì thì cứ nói =.="

bạn sửa lại dòng 5 (#define NUM_TEST 50000) để xác định số phần tử sẽ được dùng trong bài test

chương trình dịch trên cygwin gcc tốt, ở máy của mình chạy thì sắp xếp một dãy có 25000 phần tử mất 5s, 50000 phần tử mất 22s, 75000 phần tử mất 49s

Anh siêng thật =.=". Coding style của anh khá chuẩn :D

Chủ topic: Interchange Sort là gì vậy. Đây là 6 dạng sort, bạn down về ngâm cứu nhé http://vnsky.biz/lhv/SortRepresent.exe còn viết thì dựa vào free-wind là ổn

Đây là tài liệu cho toàn bộ môn này: Thích thì dùng nhé :D: http://vnsky.biz/tailieu/CTDL/ (giáo trình bên trường tớ mới vừa học xong) có cả lab+exercise+solution. Assignment thì tớ không dám post lên, khủng hoảng lắm :D

YoYoHomeZone
11-01-2010, 03:11 PM
Các hàm sắp xếp thì mình có hết rồi, sắp xếp chính xác ^^

free_wind Cái hàm tình thời gian thì hông biết làm sao cả. Để mình tham khảo bài của đại ca xem sao. Có gì cho học hỏi với nha đại ca

free_wind
11-01-2010, 11:02 PM
tất cả mọi thứ đều nằm trong thư viện chuẩn <time.h>

đầu tiên, kiểu time_t được định nghĩa là int hoặc long int (chính xác hơn là int_32), là kiểu thời gian chuẩn, giá trị của nó bằng số giây tính từ 0h 0m 0s ngày 1-1-1970

hàm time_t time(time_t* timer) nhận đối số là một con trỏ đến time_t và sẽ trả về giá trị bằng thời gian hiện tại theo kiểu time_t nằm trong 2 vị trí: kết quả trả về và timer. Nếu timer là NULL thì sẽ chỉ thay đổi kết quả trả về.

ví dụ:

// ghi lai thoi gian
timeStart = time(NULL);

// bat dau thuc hien sap xep
bubbleSort(arrayToSort, NUM_TEST);

// ghi lai thoi gian ket thuc
timeStop = time(NULL);

duration = timeStop - timeStart;

nếu bạn muốn lấy giá trị chính xác hơn (phần trăm của giây) thì ko có cách chuẩn trong C, mà nó phụ thuộc vào hệ điều hành đang dùng và máy của bạn đang dùng thuộc hệ máy tính gì ^ ^"

nobody222
23-01-2010, 06:34 PM
Nếu bạn lập trình trên Windows thì dùng như bác free_wind nói là OK rồi.

Nếu như bạn lập trình trên Linux thì quá dễ: command line của Linux có "time", chỉ cần chạy executable file với "time" là xong. Không những cho biết thời gian mà còn cho biết luôn CPU dùng bao nhiêu, vvv

YoYoHomeZone
24-01-2010, 04:46 PM
Bài tập này qua rồi. Mong các bạn giúp mình bài tập này với :D

http://www.taoxanh.net/forum/showthread.php?t=76764