Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Sắp xếp giảm dần các số nguyên trong mảng 1 chiều

  1. #1
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mặc định Sắp xếp giảm dần các số nguyên trong mảng 1 chiều

    Cho mình hỏi 2 code sau cái nào tối ưu hơn:
    Code:
    void xapxepngd(int mang[], int dodai) // xap xep nguyen giam dan , dodai= so phan tu
    	{
    		int i,j;
    		for (i=0;i<=dodai-2;i++)
    		    for (j=i;j<dodai;j++)
    			{
    				if (mang[i]<mang[j])
    					mang[i]^=mang[j]^=mang[i]^=mang[j];
    			}
    	}
    Và:
    Code:
    void xapxepngd(int mang[], int dodai) // xap xep nguyen giam dan , dodai= so phan tu
    	{
    		int i,j;
    		for (i=0;i<dodai-1;i++)
    		    for (j=i+1;j<dodai;j++)
    			{
    				if (mang[i]<mang[j])
    					mang[i]^=mang[j]^=mang[i]^=mang[j];
    			}
    	}
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 24-09-2008 lúc 08:21 AM.

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    18

    Code:
    if (mang[i]<mang[j])
    					mang[i]^=mang[j]^=mang[i]^=mang[j];
    xin hỏi ý đồ của cậu ở đây là gì,2 code chỉ khác nhau mỗi dodai-1 và dodai-2

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Code:
    mang[i]^=mang[j]^=mang[i]^=mang[j];
    Cái này là hoán vị thôi.
    Nhưng cái mình hỏi là phần in đậm ý, code thứ nhất được trích từ một bài làm rất cẩn thậm của anh langman, hầu hết các bài khác làm đều rất tối ưu, riêng đoạn code kia mình thấy không làm theo cách thông thường (cách mình nghĩ thông thường là đoạn code thứ 2) không biết cái nào tối ưu hơn nhỉ.

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi QuangHoang Xem bài viết
    Code:
    mang[i]^=mang[j]^=mang[i]^=mang[j];
    Cái này là hoán vị thôi.
    Nhưng cái mình hỏi là phần in đậm ý, code thứ nhất được trích từ một bài làm rất cẩn thậm của anh langman, hầu hết các bài khác làm đều rất tối ưu, riêng đoạn code kia mình thấy không làm theo cách thông thường (cách mình nghĩ thông thường là đoạn code thứ 2) không biết cái nào tối ưu hơn nhỉ.
    à
    2 code là như nhau bạn à . chỉ khác nhau duy nhất i và i+1.
    i thì tốn thêm phần tử nữa trong mỗi lần duyệt

    còn i<=dodai-2 và i<dodai-1 là như nhau bạn à.

    Trong bài tập lớn của mình à , Bài tập lớn của mình là mình lấy lại các hàm từ các bài con mình đã giải ra có các hàm làm về sau thì chuẩn hơn các hàm hồi mới học.
    Vì nó đúng nên mình ko có time fix lại hết được.

    Sr bạn.

    P/S : Cám ơn bạn đã chỉ bảo. hì. Không phải cái nào cũng tối ưu đâu. Có rất nhiều bug trong bài tập đấy...
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    07 2007
    Bài viết
    41

    không phải cứ bớt vòng lặp thì nó chạy nhanh

    đoạn code sau sẽ chạy nhanh hơn do không phải tính toán mỗi lần so sánh:
    Code:
    for (i=0;i<dodai;i++)
    		    for (j=i+1;j<dodai;j++)
    Đã được chỉnh sửa lần cuối bởi zxc : 29-07-2008 lúc 11:10 AM.

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Mặc định Sắp xếp giảm dần các số nguyên trong mảng 1 chiều

    Trích dẫn Nguyên bản được gửi bởi zxc Xem bài viết
    không phải cứ bớt vòng lặp thì nó chạy nhanh

    đoạn code sau sẽ chạy nhanh hơn do không phải tính toán mỗi lần so sánh:
    Code:
    for (i=0;i<dodai;i++)
    		    for (j=i+1;j<dodai;j++)
    sr .
    1 là code của bạn ko đúng đâu


    thứ 2 delay với phép + - nhỏ là ko đáng kể
    Đã được chỉnh sửa lần cuối bởi langman : 29-07-2008 lúc 11:24 AM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    07 2007
    Bài viết
    41

    code của bạn chạy ko đúng đâu
    Why?

    delay với phép + - nhỏ là ko đáng kể
    Dù nhỏ, nhưng tầm ảnh hưởng ở đây là O(n)

  8. #8
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi zxc Xem bài viết
    Why?


    Dù nhỏ, nhưng tầm ảnh hưởng ở đây là O(n)
    ko đúng với ý tưởng của giải thuật ...... sẽ khó cho người khác tham khảo

    có thật sự code của bạn chạy nhanh hơn thật sự ko ????????????? phân tích thử xem ????


    bài của bạn lại tăng 1 lần lặp lớn lên ( trường hợp i = n-1) bạn lấy gì khẳng định nó nhanh hơn ????
    nó giảm cái nọ nhưng lại tăng cái khác . bạn lấy gì khẳng định cái giảm đi đã lớn hơn cái gia tăng ?

    Tôi thấy cái bạn nói chạy nhanh hơn chỉ là tương đối .

    >> bài tôi code tương đối rồi.

    Ko có gì là tuyệt đối cả.
    Đã được chỉnh sửa lần cuối bởi langman : 29-07-2008 lúc 12:08 PM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

Các đề tài tương tự

  1. Kỹ thuật C++ Lời giải về Chuỗi Ký tự,mảng số nguyên 1 chiều,mảng 2 chiều,tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:54 AM
  2. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 AM
  3. tính tổng các số nguyên tố trong mảng 1 chiều lập trình c#
    Gửi bởi hoangkien trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 31-03-2011, 03:27 PM
  4. tìm số nguyên tố có trong mảng 2 chiều, tính tổng các số nguyên tố đó??
    Gửi bởi lesliuton01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 08-06-2010, 10:21 AM
  5. Chia 2 số nguyên trong C | Phép gán a = 3/2 sai ở đâu ???
    Gửi bởi xiu_coi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 28-04-2009, 04:41 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn