unity 使用快速排序、二分法查找

using UnityEngine;

namespace QuickSort
{
    public class TestQuickSort : MonoBehaviour
    {
        private void Awake()
        {
            int[] testArray =new int[100] ;
            for (int i = 0; i < testArray.Length; i++)
            {
                testArray[i] = Random.Range(0,200);
            }
            QuickSort(testArray,0, testArray.Length-1);
            string str = "";
            for (int i = 0; i < testArray.Length; i++)
            {
                str+= testArray[i] + " ";
            }

            Debug.Log(str);

            Debug.Log(TwoPartsSearch(100, testArray,0, testArray.Length));//有序数组
        }

        //快速排序
        private void QuickSort(int[] _array,int _left,int _right) {
            if (_left>=_right) {
                return;
            }
            int leftIndex =_left;
            int rightIndex = _right;
            int midIndex = _left;
            int temp;
            while(leftIndex< rightIndex)
            {
                while (leftIndex < rightIndex&&_array[rightIndex] >= _array[midIndex])
                {
                    rightIndex--;
                }
                temp = _array[midIndex];
                _array[midIndex] = _array[rightIndex];
                _array[rightIndex] =temp;
                midIndex = rightIndex;

                while (leftIndex < rightIndex && _array[leftIndex] <= _array[midIndex])
                {
                    leftIndex++;
                }
                temp = _array[midIndex];
                _array[midIndex] = _array[leftIndex];
                _array[leftIndex] = temp;
                midIndex = leftIndex;
            }
            QuickSort(_array,_left,midIndex-1);
            QuickSort(_array, midIndex+1, _right);
        }

        //二分查找
        private int TwoPartsSearch(int _num,int[] _array,int _left,int _right) {
            if (_right<=_left) {
                return _array[_left]== _num?_left:-1;
            }
            int midIndex = (_left + _right)/ 2;
            if (_num == _array[midIndex]) {
                return midIndex;
            }
            if (_num == _array[midIndex])
            {
                return _array[midIndex];
            }
            if (_num< _array[midIndex]) {
                return TwoPartsSearch(_num, _array, _left, midIndex-1);
            }
            return TwoPartsSearch(_num, _array, midIndex+1, _right);
        }
    }
}


版权声明:本文为wakakakakakakak原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。