C#基礎[陣列,選擇排序,折半查詢]
阿新 • • 發佈:2018-12-14
陣列
陣列的定義 概念:同一種類型資料的集合 其實陣列就是一個容器
陣列的好處:可以自動給陣列中的元素從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;//代表沒找到
}
結果: