Sorun C anlama ++ Sıralı Arama

oy
0

Ben C ++ için yeni ve zorluk bu işlevi anlamakta zorluk çekiyorum. birisi aracılığıyla bana yürümek olabilir mi?

int seqSearch(int [ ] list, int target)
{
    //precondition:  The list is in non-decreasing order
    //postcondition:  The method returns -1 if the target is not in the list.  If the target
    //is in the list, the method returns the index of the first occurrence of the target.
    int result = -1;
    boolean foundBigger = false;
    int i = 0;
    while (result == -1 && !foundBigger && i < list.length)
    {
        if (target == list[i])
            result = i;
        else if (list[i] > target)
            foundBigger = true;
        //endif
        i++;
    }  //endwhile
    return result;
}
Oluştur 19/02/2013 saat 00:48
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
1

Hmm, "düzen dışı azalan". Bunun için daha iyi bir kelime :-) artan bir düzendir

Fonksiyon listesi küçükten büyüğe olduğunu varsayar. Listedeki ilk öğe ile başlayarak (liste [0]), sen (yani "hedef") Aradığınız öğe ile karşılaştırın. Eşit ise endekse "i" neden ayarlayın. Eğer değilse, artırmak ve döngü devam eder. tek her öğe tek aracılığıyla kadar gidin:

(A) bulmak "hedef", YA

(B) Mevcut öğe "hedefin" daha büyük (hiçbir nokta üzerinde goind beri bu noktada çıkın Listenizi sıralanır beri)

Dönüş değeri "target" bulundu veya -1 bulunamazsa eğer listede endeksidir.

Cevap 19/02/2013 saat 00:56
kaynak kullanıcı

oy
2

Bir hedef sayı listesindeki numara sırasına göre saklanır listede, mevcut olup olmadığını bulmaya çalışıyor.

döngü devam ediyor

  1. hedefe kadar bulunamadı. (Durumu: sonuç == -1) (hedef ardından meydana bulundu olursa = -1 ve döngü kırılır, öğenin dizinini dönen!.

  2. veya listedeki eleman Till hedeften daha büyük. (Durumu:! FoundBigger) (o hedeften daha az bir sayı bulan, bu yüzden kalan listedeki sayı bulma şansı onların olacaktı Yani buraya kadar mevcut olmayan demektir eğer liste, büyükten küçüğe gibi. listesi ve ayrılmalıyız döngü.)

  3. veya bütün listeye Till işlenen ve onun bulunamadı. (Durumu: i <list.length)

artık berrak Umut.

Cevap 19/02/2013 saat 00:59
kaynak kullanıcı

oy
0

Sonuç == -1 ve foundBigger doğru olduğunda ve daha sonra işleve geçen dizinin büyüklüğü fazla 0

o zaman döngü içindeyken gider

Yukarıdaki kriterlerden biri tam o doldurulmaz bile o döngü içinde gitmezdim eğer onun dönüşün değerini döndürecektir

Hedef parametresini kullanarak işleve geçmesi değer dizisi listesinin i değerine eşitse o zaman o zaman i o değere sonucu atamak

hedef değer foundBigger gerçek atanır sonra dizi listesinin i değerinden düşük olup olmadığını ise döngüye gelip bu nedenle yeniden Yukarıdaki ölçütleri yerine getiremeyen

sonra ben 1 artırılır Yukarıdakilerin hiçbiri işe yaramazsa ve while döngüsünün dışına çıkarsa

Eğer hedef değer o zaman döneceğini dizide sonucu değilse hangi pozisyon hedef değer kaydedilir bulana kadar gider -1

aksi takdirde konumu dönecekti

Cevap 19/02/2013 saat 01:04
kaynak kullanıcı

oy
0
// precondition:  The list is in non-decreasing order
// postcondition:  The method returns -1 if the target is not in the list.  If the target
// is in the list, the method returns the index of the first occurrence of the target.
int seqSearch(int [ ] list, int target)
{
    int result = -1;                                    // Set result to 'not-found' value
    // Also we want to stop search if smth bigger than `target' will be found
    // Remember the original list is assumed to be sorted, so first value
    // bigger than `target' means: no need to continue, it is guarantied that `target'
    // is nto here!
    boolean foundBigger = false;
    int i = 0;                                          // Initial index to start search
    // Repeat 'till `target' not found AND not found smth bigger that requested target
    // and current index less than the list size...
    while (result == -1 && !foundBigger && i < list.length)
    {
        if (target == list[i])                          // Is current item equal to the requested?
            result = i;                                 // Remember result index (this will break the loop)
        else if (list[i] > target)                      // Is current item bigger than the requsted?
            foundBigger = true;                         // Yep, will break the loop w/ no result to return
        //endif
        i++;                                            // move to next item in the list
    }  //endwhile
    return result;                                      // Return the result,  whatever it is
}
Cevap 19/02/2013 saat 01:04
kaynak kullanıcı

oy
0

Bu o zaman onun DEFINETELY değil c ++ kodu çalışıyor. while döngüsünde boolean operasyonları hayranlarıyla mantığı (bu java ile yazılmış oluyor beni şeyi yapar Bunların her ikisi için izin veren java) diziler için .length özelliği yok ++ operasyonları ve c sipariş için ayrı parantez içine alınması gerekir hala olsa aynı kalır geride.

Öncelikle sonuç int (döndürülecek olanını) ve istediğiniz elemanı ilettik ise denetleyen boole başlatın. Sürece senin arayan ve size devam hedef öğesi 'geçti' değil ne bulamadı olarak.

Sonra hedef bulduysanız sizin sonuç int doğru dizine değiştirilir ve yöntem sona erdirmek ve bir dizin dönecektir böylece döngü koşullarını sonraki kontrol endeksi -1 bitecek ve gerçek bir sayısını temsil edecek.

Eğer aradığınız int ilettik eğer ikinci ifade denetler. Sen etmekte olduğunuz değer aradığınız değerden yüksek olduğunu ve koşulları kontrol edilir döngü sefere sona erecek Eğer foundBigger boolean değiştirmek ardından öğeyi bulamadık eğer öyleyse liste sıralı olduğunu biliyoruz .

Bu koşulların hiçbiri karşılanırsa size hala dönmek böylece madde listesinde değildi biliyorum listenizin sonuna vardığımızda o zaman sonunda bu yüzden arama liste sonunun gidecek -1.

Cevap 19/02/2013 saat 01:06
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more