一、快速排序算法
步骤1:选取一串数字中的中心轴
步骤2:将大于中心轴的数字放在右边
步骤3:将小于中心轴的数字放在左边
步骤4:分别对左右两个序列重复前三步操作
public class QuickSort : MonoBehaviour
{private void Start(){int[] Nums = { 4, 3, 6, 1, 8, 0, 3, 2, 5, 7};Sort(Nums, 0, 9);for (int i = 0; i < 10; i++){Debug.Log(Nums[i]);}}void Sort(int[] nums,int left,int right){//退出条件if (left >= right)return;int i = left;int j = right;//中心元素取为第一个元素int temp = nums[left];while(i != j){//从最右边的元素开始比较中心元素while(i < j && nums[j] >= temp){j--;}if(i < j ){nums[i] = nums[j];}while(i < j && nums[i] <= temp){i++;}if(i < j){nums[j] = nums[i];}}nums[i] = temp;Sort(nums, left, i - 1);Sort(nums, i+1, right);}
}
二、冒泡排序算法
步骤一、从数组的最左侧两个元素进行比较
步骤二、将较大的数向右移动,再进行比较
步骤三、直到将最大的数字放在最右边
步骤四、重复上述操作,不过这次比较数组的数量-1
public class BubbleSort : MonoBehaviour
{private void Start(){int[] array = { 6, 5, 8, 7, 1, 2, 3, 5 };Sort(array);for (int i = 0; i < array.Length; i++){Debug.Log(array[i]);}}private void Sort(int[] array){//进行i次排序,对数组内所有元素都进行比较for (int i = 0; i < array.Length - 1; i++) {//对某一元素进行的相邻元素的比较,比较次数差i次for(int j = 0; j < array.Length-1-i; j++){if(array[j] > array[j+1]){int temp = array[j];//如果左边的数字比右边的大,就把大的数字向右平移一位array[j] = array[j + 1];array[j + 1] = temp;}}}}
}
三、二分查找(要求数组顺序排列)
一、初始化三个序号,分别代表第一个,最后一个和中间序号
二、用中间序号的值和目标值进行对比,如果相等就返回
三、如果中间序号的值大于目标值,就向左缩小范围
四、如果中间序号的值小于目标值,就向右缩小范围
第一种实现:常规实现
public class BinarySearch : MonoBehaviour
{private void Start(){int[] array = { 8, 11, 21, 28, 32, 43, 48, 56, 69, 72, 80, 94 };Debug.Log(Search(array, 80)); }private int Search(int[] array,int key){var min = 0;var max = array.Length - 1;var mid = 0;while(min <= max){mid = (min + max) / 2;if(array[mid] > key){max = mid - 1;}else if(array[mid] < key){min = mid + 1;}else if(array[mid] == key){return mid;}}return 0;}
}
第二种实现:递归实现
Debug.Log(SearchTwo(array, 80,0,12));private int SearchTwo(int[] array,int key,int low,int high){if (low > high)return -1;var mid = (low + high) >> 1;if (array[mid] > key){return SearchTwo(array, key, low, mid - 1);}else if (array[mid] < key){return SearchTwo(array, key, mid + 1, high);}elsereturn mid;}
}
四、基于四叉树/八叉树的碰撞检测
五、随机寻路算法
六、跟踪算法
七:闪避算法
八:A*寻路算法