Unity中的快速排序算法&&二分查找
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity中的快速排序算法&&二分查找相关的知识,希望对你有一定的参考价值。
参考技术A 介绍:
快速排序是由 东尼·霍尔 所发展的一种 排序算法 。在平均状况下,排序 n 个项目要 Ο ( n log n )次比较。在最坏状况下则需要 Ο ( n 2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο ( n log n ) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。
步骤:
从数列中挑出一个元素,称为 "基准"(pivot),
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为 分区(partition) 操作。
递归 地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
2、演示的结果图如下
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其 缺点 是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置 记录 将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的 记录 ,使查找成功,或直到子表不存在为止,此时查找不成功。简单的来说利用的原理就是我们中学所学的二分查找,空间复杂度为O(n),时间复杂度为O(log(n))。
注意使用二分查找的数组必须是排序好的数组。
Java中的快速排序算法
public static void quicksort(int[] array,int low,int high) { if(low > high) { return; } int i=low; int j=high; int temp = array[low];//temp就是基准位 while(i<j) { while(temp <= array[j] && i<j)//先看右边,依次往左递减 { j--; } while(temp >= array[i] && i<j)//再看左边,依次往右递加 { i++; } if(i < j )//满足条件则交换 { int t = array[i]; array[i] = array[j]; array[j] = t; } } //最后将基准位与i和j相等位置的数字交换 array[low] = array[i]; array[i] = temp; //递归调用左半数组 quicksort(array,low,j-1); //递归调用右半数组 quicksort(array,j+1,high); } public static void main(String[] args) { int[] array = {49, 38, 65, 97, 76, 13, 27, 50 }; System.out.println("排序前的数组:"+Arrays.toString(array)); quicksort(array,0,array.length-1); System.out.println(); System.out.println("排序后的数组:"+Arrays.toString(array)); }
以上是关于Unity中的快速排序算法&&二分查找的主要内容,如果未能解决你的问题,请参考以下文章