1. 程式人生 > >C#基礎[陣列,選擇排序,折半查詢]

C#基礎[陣列,選擇排序,折半查詢]

陣列

陣列的定義 概念:同一種類型資料的集合 其實陣列就是一個容器

陣列的好處:可以自動給陣列中的元素從0開始編號,方便操作這些元素

格式: 在這裡插入圖片描述 練習:

int[] arr = new int[] { 1, 2, 3 };
        for(int x=0; x< arr.Length;x++)//小於陣列的長度時 自增加
        {
            Debug.Log(arr[x]);//在控制檯輸出資訊
        }

結果: 在這裡插入圖片描述 獲取最值 獲取最大值

void Start () {
        int[] arr = new int[] { 1, 10, 9, 4, 5, 6, 7, 6 };//陣列的範圍
        GetMax(arr);//獲取到這個函式的陣列
	}
public void GetMax(int[] arr)//建立新函式
    {
        int temp = arr[0];
        for (int i = 1; i < arr.Length;i++)//當小於陣列的長度時 自增加
        {
            
            if(arr[i]>temp)//判斷是否後面的數大於temp
            {
                temp = arr[i];//大於的話 就賦值給temp 繼續迴圈判斷
            }
        Debug.Log("最大值是:" + temp);
        }
     }

結果: 在這裡插入圖片描述

獲取最小值 與獲取最大值方法類似 引用這個函式就好了

public void GetMin(int[] arr)
    {
        int temp = 0;
        for (int i = 1; i < arr.Length; i++)//當小於陣列的長度時 自增加
        {

            if (arr[i] < temp)//判斷是否後面的數大於temp
            {
                temp = i;//大於的話 就賦值給temp 繼續迴圈判斷
            }
            Debug.Log("最小值是:" + arr[temp] + "下標是:" + temp);
        }
    }

並且這個函式可以出現數組的下標

選擇排序

原理 數組裡的第一個數 與 後面的數依次對比 最小(或最大)放前面 一輪一輪對比過去 直到全部待排序的數排完

在這裡插入圖片描述 練習:

void Start () {
        int[] arr2 = new int[] { 5, 8, 4, 3, 6, 9, 7 };
        SelectSort(arr2);

	}
  public void SelectSort(int[] arr)//選擇排序函式 傳一個數組回來
    {
        for (int i = 0; i < arr.Length; i++)//控制第幾次排序
        {
            for (int j = i + 1; j < arr.Length; j++)//控制第i次排序 裡需要比較幾回
            {
                int temp = 0;
                if (arr[i] > arr[j])//如果大於被比較的數話 就對換位置
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        Ergodic(arr);
    }

    

    public void Ergodic(int[] arr)//遍歷陣列 把陣列中的每個元素都訪問到
    {
        for(int i=0;i<arr.Length;i++)
        {
            Debug.Log(arr[i]);//在控制檯顯示出來
        }
    }

結果: 在這裡插入圖片描述

折半查詢

原理: 搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半 在這裡插入圖片描述

練習:

void Start () {
        int[] arr4 = new int[] { 2, 3, 4, 5, 6, 7, 8, 9 };
        int key = 8;
        int x = Reduce(arr4, key);//引用這個函式 並輸入8
        if (x >= 0)
        {
            Debug.Log(key + "存在於arr4" +",角標是:" + x);
        }

	}

    public int Reduce(int[] arr,int key)//折半查詢 key是輸入數字
    {
        int min = 0;//最小的下標等於0
        int max = arr.Length - 1;//最大的下標 等於陣列的長度減1
        int mid = 0;//中間的下標
        while(min <= max)//滿足最小下標小於等於最大下標時
        {
            mid = (min + max) / 2;

            if(key < arr[mid])//輸入的數小於中間的下標
            {
                max = mid - 1;
            }
            else if(key > arr[mid])//輸入的數大於中間的下標
            {
                min = mid + 1;
            }
            else
            {
                return mid;
            }
        }
        return -1;//代表沒找到
    }

結果: 在這裡插入圖片描述