none
[VB2005]陣列中找最小值問題 RRS feed

  • 問題

  • 請問我在陣列中我要找最小值

    例如 Data(DataCounter)

    Data(0)=1, Data(1)=5,Data(2)=7,Data(3)=2,Data(4)=8

    我的程式可以找到Data(3)是最小值 那請問我要怎麼修改可以知道DatCounter=3

    Min=Data(0)

    For Counter=0 to DataCounter

    If Data(Counter)<Min Then

        Min=Data(Counter)

    Else

        Continue For

    End If

    2012年2月6日 上午 07:47

解答

  • 也可以使用 陣列的Min函數來取得最小值的數字

    之後要找出最小值數字是哪一個索引的話

    再準備一個迴圈去跑去紀錄

      Dim Data(4) As Integer
            Data(0) = 1
            Data(1) = 5
            Data(2) = 7
            Data(3) = 2
            Data(4) = 8
    
    
    
            Dim Min As Integer = Data.Min()
    
           
          '找出最小數字的索引
            Dim index = 0
            For Each d In Data
    
                If d = Min Then
                    Exit For
                End If
    
                index = index + 1
            Next
    
            '輸出索引值
            Console.WriteLine(index)
            Console.ReadKey()
    

     

     




    • 已編輯 Shadow .Net 2012年2月6日 上午 08:18
    • 已標示為解答 Ling1982 2012年2月6日 上午 09:15
    2012年2月6日 上午 08:14

所有回覆

  • 你可以先利用Array.Sort將陣列排序,就可以很容易找到最小或最大值。

    http://msdn.microsoft.com/en-us/library/6tf1f0bc(v=vs.80).aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2012年2月6日 上午 07:55
  • 我可以找到最小值

    我想知道的事最小值是那一個

    請問這樣要怎麼修改?謝謝

    2012年2月6日 上午 07:59
  • 也可以使用 陣列的Min函數來取得最小值的數字

    之後要找出最小值數字是哪一個索引的話

    再準備一個迴圈去跑去紀錄

      Dim Data(4) As Integer
            Data(0) = 1
            Data(1) = 5
            Data(2) = 7
            Data(3) = 2
            Data(4) = 8
    
    
    
            Dim Min As Integer = Data.Min()
    
           
          '找出最小數字的索引
            Dim index = 0
            For Each d In Data
    
                If d = Min Then
                    Exit For
                End If
    
                index = index + 1
            Next
    
            '輸出索引值
            Console.WriteLine(index)
            Console.ReadKey()
    

     

     




    • 已編輯 Shadow .Net 2012年2月6日 上午 08:18
    • 已標示為解答 Ling1982 2012年2月6日 上午 09:15
    2012年2月6日 上午 08:14
  • 不知道這樣是不是你要的:

    Module Module1
    
        Sub Main()
            Dim Data(4) As Integer
            Data(0) = 1
            Data(1) = 5
            Data(2) = 7
            Data(3) = 2
            Data(4) = 8
            
            Console.WriteLine("排序前")
            For i As Integer = Data.GetLowerBound(0) To Data.GetUpperBound(0)
                Console.WriteLine("Data[{0}] = {1}", i, Data(i))
            Next
    
            Array.Sort(Data)
    
            Console.WriteLine("排序後")
            For i As Integer = Data.GetLowerBound(0) To Data.GetUpperBound(0)
                Console.WriteLine("Data[{0}] = {1}", i, Data(i))
            Next
    
            Console.WriteLine("最小值:Data[{0}] = {1} ; 最大值:Data[{2}] = {3}" _
                                        , Data.GetLowerBound(0), Data(Data.GetLowerBound(0)) _
                                        , Data.GetUpperBound(0), Data(Data.GetUpperBound(0)))
    
            Console.Read()
        End Sub
    
    End Module
    
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2012年2月6日 上午 08:16
  • 請問我在陣列中我要找最小值

    例如 Data(DataCounter)

    Data(0)=1, Data(1)=5,Data(2)=7,Data(3)=2,Data(4)=8

    我的程式可以找到Data(3)是最小值 那請問我要怎麼修改可以知道DatCounter=3

    Min=Data(0)

    For Counter=0 to DataCounter

    If Data(Counter)<Min Then

        Min=Data(Counter)

    Else

        Continue For

    End If

    請問是不是有筆誤還是我看錯了,最小值應該是Data(0) = 1。

    參考Shadow所說的,也可以用這樣的寫法來找到最小值以及其索引。

    Array.Sort(Data)
    Console.WriteLine("最小值:Data[{0}] = {1}", Array.BinarySearch(Data, Data.Min), Data.Min)
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2012年2月6日 上午 08:29
  • 您好

    1.

    Data(0)=1, Data(1)=5,Data(2)=7,Data(3)=2,Data(4)=8

    我的程式可以找到Data(3)是最小值 那請問我要怎麼修改可以知道DatCounter=3

    最小值應該是 Data(0) 吧?

     

    2. 參考以下代碼,當 If Data(Counter)<Min Then 成立時,紀錄索引

            Dim Data(4) As Integer
            Data(0) = 10
            Data(1) = 5
            Data(2) = 7
            Data(3) = 2
            Data(4) = 8
    
            Dim Min = Data(0)
            Dim DataCounter = 0
            For Counter = 0 To Data.Length - 1
                If Data(Counter) < Min Then
                    Min = Data(Counter)
                    DataCounter = Counter
                Else
                    Continue For
                End If
            Next
            Console.WriteLine(DataCounter)
    


    歡迎參觀我的Blog.NET菜鳥自救會
    2012年2月6日 上午 08:32
    版主
  • Array.IndexOf(Data, Data.Min())
    • 已提議為解答 Shadow .Net 2012年2月6日 上午 09:45
    2012年2月6日 上午 09:24