package com.structure.demo; import android.app.Activity; import android.os.Bundle; import android.util.Log; import java.util.ArrayList; public class SortSearchActivity extends Activity { private int[] array = {2, 3, 3, 5, 5, 5, 5, 6, 7, 9}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //线性查找 // int result = sortSearch(array, 3); // Log.i("tag",result+"===result=="); //二分查找 int result = binarySearch(array, 0, array.length - 1, 3); ArrayList<Integer> list = binarySearch2(array, 0, array.length - 1, 5); for (int i = 0; i < list.size(); i++) { Log.i("tag", list.get(i) + "======binarySearch2======="); } } /** * 线性查找 * @param array * @param value * @return */ private int sortSearch(int[] array, int value) { for (int i = 0; i < array.length; i++) { if (array[i] == value) { return i; } } return -1; } /** * 二分法查找,找到单独的一个就返回结果 */ private int binarySearch(int[] array, int left, int right, int findValue) { if (left > right) { return -1; } int mid = (left + right) / 2; int midValue = array[mid]; //要查找的数在右边 if (findValue > midValue) { return binarySearch(array, mid + 1, right, findValue); } else if (findValue < midValue) { return binarySearch(array, left, mid - 1, findValue); } else { return mid; } } /** * 二分法查找,找到多个返回一个集合 */ private ArrayList<Integer> binarySearch2(int[] array, int left, int right, int findValue) { if (left > right) { return new ArrayList<>(); } int mid = (left + right) / 2; int midValue = array[mid]; //要查找的数在右边 if (findValue > midValue) { return binarySearch2(array, mid + 1, right, findValue); } else if (findValue < midValue) { return binarySearch2(array, left, mid - 1, findValue); } else { ArrayList<Integer> list = new ArrayList<>(); int temp = mid - 1; while (true) { if (temp < 0 || array[temp] != findValue) { break; } list.add(temp); temp--; } list.add(mid); temp = mid + 1; while (true) { if (temp > array.length - 1 || array[temp] != findValue) { break; } list.add(temp); temp++; } return list; } } }
数据结构和算法——线性查找和二分法查找
最新推荐文章于 2022-07-18 17:32:23 发布