C - Bài 25: Tìm kiếm nhị phân.

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ม.ค. 2025

ความคิดเห็น • 78

  •  4 ปีที่แล้ว

    Hay lắm a

    •  4 ปีที่แล้ว

      thank you!

  • @HONESTMAN1410
    @HONESTMAN1410 3 ปีที่แล้ว +1

    Nếu mảng có trên 10000 phần tử thì cách này nhanh và đỡ lặp hơn cách dò từng phần tử như bài trước.

    •  3 ปีที่แล้ว

      chính xác!

  • @kenpham5934
    @kenpham5934 4 ปีที่แล้ว +3

    Em đang chuẩn bị cho tin học trẻ Nghệ An cấp tỉnh :))Nên học C cơ bản của anh cảm ơn anh nha:))!!

    •  4 ปีที่แล้ว

      ok nhé

  • @quinguyen205
    @quinguyen205 3 ปีที่แล้ว +1

    Thầy ơi em không hiểu khi gán right=N-1 thì chương trình tự hiểu nó là phải cùng ak
    Em viết lại y chan mà bị lỗi chỗ này ak

    • @aitruong7468
      @aitruong7468 3 ปีที่แล้ว +1

      vd ha: ta có một mảng 10 giá tri thì vị trí mảng sẽ là a[0],a[1],...a[9] thì phải cùng tương đương với vị trí cuối cùng của mảng. mà ở đây mảng ta có vị trí cuối cùng là 9 tương đương với N-1 .

  • @NghiaNguyen-hb8pu
    @NghiaNguyen-hb8pu 4 ปีที่แล้ว

    cái #define N 10 ở trên cùng ạ.
    có liên quan gì không anh, cám ơn anh.

    •  4 ปีที่แล้ว +1

      Đó là phần khai báo hằng số

  • @nguyenphanhoangthong4496
    @nguyenphanhoangthong4496 5 ปีที่แล้ว +1

    tại sao phải có hàm sắp xếp vậy anh

    •  5 ปีที่แล้ว

      Để tìm kiếm nhị phân thì danh sách phải được sắp xếp

  • @kiettran6529
    @kiettran6529 4 ปีที่แล้ว +2

    Em thấy nếu như mảng chưa được sắp xếp mà mình đi sắp xếp mảng rồi tìm kiếm nhị phân thì mình tốn thêm thời gian sắp xếp mảng, như vậy thì tốn thời gian hơn so với tìm kiếm tuyến tính chứ ạ?

    •  4 ปีที่แล้ว +1

      hãy gg search chủ đề này nhé e

  • @hoanglong6720
    @hoanglong6720 2 ปีที่แล้ว

    a ơi nếu dùng tìm kiếm nhị phân thì dãy phải theo 1 thứ tự tăng dần hoặc giảm dần đúng ko ạ
    Nếu ko theo thứ tự thì có dùng được cách này ko anh

    •  2 ปีที่แล้ว

      k sắp xếp thì chỉ có tìm kiếm tuyến tính thôi

    • @hoanglong6720
      @hoanglong6720 2 ปีที่แล้ว

      @ Dạ em cảm ơn anh

  • @laitranthevinh
    @laitranthevinh 3 ปีที่แล้ว

    Ủa giữa của 10 phần tử phải là phần tử thứ 5 chứ ta

    •  3 ปีที่แล้ว

      Nó tuỳ theo cách mình quy ước

    • @laitranthevinh
      @laitranthevinh 3 ปีที่แล้ว

      @ sau cái series này anh làm series C/C++ nâng cao được không anh!

  • @kenpham5934
    @kenpham5934 4 ปีที่แล้ว +1

    Video tròn 3 năm :)))

    •  4 ปีที่แล้ว

      2 years old

    •  4 ปีที่แล้ว

      gần 3 năm r

  • @thangthangthang44
    @thangthangthang44 4 ปีที่แล้ว +1

    Dạ anh ơi, thay vì dùng kết thúc chương trình là -1 thì em dùng EOF, đều em không hiểu vì sao chương trình không chạy ạ ??

    •  4 ปีที่แล้ว +1

      Debug đi e

  • @LongNguyen-zb3rh
    @LongNguyen-zb3rh 3 ปีที่แล้ว +1

    Thầy dạy dễ hiểu quá ạ😍

    •  3 ปีที่แล้ว

      thank you e

  • @thuthuynguyenthi9698
    @thuthuynguyenthi9698 5 ปีที่แล้ว

    Tại sao Điều kiện trong while bằng 1 thì là vòng lặp vô hạn vậy ạ?

    •  5 ปีที่แล้ว +3

      Ngôn ngữ C hay c++ quy ước, với mọi giá trị khác 0 và khác NULL là điều kiện đúng

  • @BDCPT-amPhiHoang
    @BDCPT-amPhiHoang 4 ปีที่แล้ว

    Anh ơi vậy nếu muốn đếm số lần xuất hiện của một phần tử bằng cái này thì làm sao ạ.

    •  4 ปีที่แล้ว

      Tìm xem nếu x xuất hiện thì lấy vị trí của x rồi tìm bên cạnh trái phải vị trí xuất hiện đó là xong

  • @NamHaVblog
    @NamHaVblog 2 ปีที่แล้ว

    1

  • @BaoTran-wv3nn
    @BaoTran-wv3nn 4 ปีที่แล้ว

    sao em nhập int arr[N] lại báo lỗi nhỉ

    •  4 ปีที่แล้ว

      xem lỗi và sửa theo lỗi nha

  • @thuanlevan4483
    @thuanlevan4483 4 ปีที่แล้ว

    a ơi. bài này sao không dùng được int* vậy ạ. em dùng lại hàm nhập của bài trước thì không được ạ. bên dưới hàm main em cũng khai bao int *arr ; rồi ạ

    •  4 ปีที่แล้ว

      gọi và truyền đúng là ok mà e

    • @thuanlevan4483
      @thuanlevan4483 4 ปีที่แล้ว

      ​@
      int* nhap()
      {
      static int arr[N];
      int i ;
      for ( i = 0 ; i < N ; i ++ )
      {
      scanf("%d", &arr[i] );
      }
      return arr ;
      }
      //int nhap( int arr[] )
      //{
      // int i;
      // for(i = 0; i< N; i++ )
      // {
      // scanf("%d", &arr[i]);
      // }
      //}
      void hienThi( const int arr[] )
      {
      int i ;
      for ( i = 0 ; i < N ; i ++ )
      {
      printf("%5d ", arr [i]);
      }
      printf("
      ");
      }
      void sort(int arr[] )//tang dan
      {
      int i,j ;
      for ( i = 0 ; i < N - 1 ; i ++ )
      {
      for ( j = N - 1 ; j > i ; j -- )
      {
      if ( arr[ j ] < arr[ j - 1 ] )
      {
      int tmp = arr [ j ] ;
      arr [ j ] = arr [ j - 1 ];
      arr [ j - 1 ] = tmp ;
      }
      }
      }
      }
      int binarySearch ( int arr [] , int x )
      {
      int left = 0 , right = N - 1 ;
      while ( left

    • @thuanlevan4483
      @thuanlevan4483 3 ปีที่แล้ว

      @Hai Tuan quên r 🤣🤣🤣

  • @uctran4889
    @uctran4889 4 ปีที่แล้ว

    sao x = -1 lại break ạ

    •  4 ปีที่แล้ว

      giả sử nhập -1 để kết thúc việc nhập dữ liệu vào

  • @manhnguyenduc7416
    @manhnguyenduc7416 5 ปีที่แล้ว

    a ơi e dùng while(1) thì nó liên tục thông báo tìm thấy x và ko dừng đc

    •  5 ปีที่แล้ว

      vòng lặp vô hạn phải có điểm dừng nhé, thêm điểm dừng vào

    • @manhnguyenduc7416
      @manhnguyenduc7416 5 ปีที่แล้ว

      @ e thêm lệnh break nữa. mà cái e thắc mắc là a ko dùng break mà sao nó ko giống e .

    •  5 ปีที่แล้ว

      @@manhnguyenduc7416 e xem lại thuật toán nhé

  • @legiacuong3634
    @legiacuong3634 3 ปีที่แล้ว

    Cái khúc while(left

    •  3 ปีที่แล้ว +1

      Đc nhé

  • @chientran2727
    @chientran2727 5 ปีที่แล้ว

    vì sao xét bên phải, left=mind +1

    • @leephan1912
      @leephan1912 4 ปีที่แล้ว +1

      Vì giá trị left lúc đó ko còn nằm trái cùng nữa vì dãy bị "chặt" ra phân nữa rồi, xét bên phân nữa còn lại nên left bắt đầu bằng số sau mid :v

  • @zkdlin6733
    @zkdlin6733 3 ปีที่แล้ว

    anh ơi cho em hỏi với ạ, thuật toán này sẽ như thế nào khi trong mảng có các phần tử giống nhau ạ? nó vẫn vậy ạ?

    • @HoangNguyen-rl4zs
      @HoangNguyen-rl4zs 3 ปีที่แล้ว

      ở phần main phải thêm các vòng for để duyệt từ đầu nếu như có phần tử nào bằng thì in ra

  • @vnnews3632
    @vnnews3632 4 ปีที่แล้ว

    anh ơi cho e hỏi tại sao left

    •  4 ปีที่แล้ว

      khi chỉ còn lại 1 phần tử thì phải có đk = nó mới chạy đc

  • @khanh-toannguyen7552
    @khanh-toannguyen7552 7 ปีที่แล้ว +3

    anh ơi anh post hết các phần nâng cao của C và C++ đi anh :'(. Rất cám ơn anh về cái video này

    •  7 ปีที่แล้ว +2

      a đang cập nhật nhanh nhất có thể nhé e.

  • @24.nguyenhuytan90
    @24.nguyenhuytan90 3 ปีที่แล้ว

    A ơi cho em hỏi.
    Đoạn 7:31 trong vòng lặp while, vd ta được arr[mid] == x thì nó sẽ thực hiện return 1. Và khi thực hiện vòng lặp xong thì nó tiếp tục return 0. Vậy là nó không có đè lên cái return 1 hả a?

    • @vanlethanh
      @vanlethanh 3 ปีที่แล้ว

      khi gặp return thì nó sẽ kết thúc function luôn.

  •  7 ปีที่แล้ว

    Tại sao mình cài đặt hàm tìm kiếm nhị phân xong chạy luôn luôn trả về giá trị -1 vậy ạ mình cám ơn

    •  7 ปีที่แล้ว

      #include
      #include
      int timkiemnhiphan(int a[],int n,int x)
      {
      int left=0;
      int right=n-1;
      while(left

  • @thanhtuhoang4773
    @thanhtuhoang4773 5 ปีที่แล้ว

    anh ơi cho em hỏi
    While(1) là ji ạ ???

  • @pdangchinh9828
    @pdangchinh9828 4 ปีที่แล้ว

    a quay video với chỉnh sửa bằng phần mềm nào thế ạ

    •  4 ปีที่แล้ว +1

      Fast stone capture vs premier

    • @pdangchinh9828
      @pdangchinh9828 4 ปีที่แล้ว

      @ thanks idol

  • @nguyenlehongvi4946
    @nguyenlehongvi4946 5 ปีที่แล้ว

    đối với mảng giảm dần thì sao ạ

  • @hanguyen-gc9gl
    @hanguyen-gc9gl 3 ปีที่แล้ว

    Khó hiểu quá huhu

  • @SangNguyen-xo4oj
    @SangNguyen-xo4oj 5 ปีที่แล้ว

    thầy ơi tai sao return 1 là tồn tại x ạ

    •  5 ปีที่แล้ว

      Quy ước như thế e nhé

  • @ObitoUchiha-ms6xt
    @ObitoUchiha-ms6xt 3 ปีที่แล้ว +2

    sao x == -1 lại break vậy a? lỡ trong mảng có -1 thì sao

    • @hieuuhieu7
      @hieuuhieu7 ปีที่แล้ว

      x là vị trí chứ không phải giá trị trong mảng, mà trong mảng sẽ không có vị trí âm. Mảng bắt đầu từ vị trí thứ 0

  • @lamle3848
    @lamle3848 6 ปีที่แล้ว +1

    Tại sao x=-1 lại thoát chương trình vậy a

    •  6 ปีที่แล้ว

      Vì -1 không phải chỉ số của mảng

    • @thanhtuhoang4773
      @thanhtuhoang4773 5 ปีที่แล้ว

      em tưởng x = -1 là giá trị của phân tử trong mảng chứ ạ

  • @Chien-xe8hp
    @Chien-xe8hp 6 ปีที่แล้ว

    sao phải phức tạp thế nhỉ. muôn tìm 1 giá trị nào đó trong mảng chỉ cần gán nó cho x rồi lần lượt kiểm tra các giá trị từ đầu mảng đến cuối mảng xem giá trị nào bằng x là ok thôi mà .Sao phải phức tạp thế nhỉ ???

    •  6 ปีที่แล้ว

      Thế nếu một tỉ tỉ phần tử thì tìm đến bao giờ?

    • @nathan360blog8
      @nathan360blog8 6 ปีที่แล้ว

      Não cháu không đc tốt thì đừng học lập trình nữa

    • @Chien-xe8hp
      @Chien-xe8hp 6 ปีที่แล้ว

      @@nathan360blog8 Bạn có lý trong trường hợp này đấy

    • @toanmacvan9916
      @toanmacvan9916 5 ปีที่แล้ว +1

      @@nathan360blog8 mới học nên vậy thôi mà =)))

    • @vietnamtv7304
      @vietnamtv7304 5 ปีที่แล้ว

      @ nhưng em thấy nêu thế bài này nó lại cần sắp xếp trc khi tìm vậy liệu có nhanh hơn là mấy k ạ ?
      E mới làm quen nên thôi đừng gạch đá ạ :))