针对 有序数组,可以使用更高效的二分查找。
以升序数组为例, 二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较:
- 如果相等,即找到了返回该元素在数组中的下标
- 如果小于,以类似方式到数组左半侧查找
- 如果大于,以类似方式到数组右半侧查找
重点是有序数组。
快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现。
Java实现:
public static void main(String[] args) {
int[] arr = {12, 34, 23, 45};
System.out.println(binarySearch(arr,34));
}
public static int binarySearch(int[] arr,int num) {
int left = 0;
int right = arr.length - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(num < arr[mid]) {
right = mid - 1;
}else if (num > arr[left]) {
left = mid + 1;
}else {
return mid;
}
}
return -1;
}
C语言实现:
int main()
{
int i, k = 0;
scanf("%d", &k);
int arr[] = { 23,3,45,12 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
if (arr[i] == k)
{
printf("你要找的数是:%d", arr[i]);
}
}
return 0;
}