数组高级
1 二分查找思路: 查找元素的索引,一次排除一半的元素 2 1.计算开始索引和结束索引 3 start = 0; 4 end = array.length-1 5 2.计算中的索引 mid = (start+end)/2; 6 3.让中间元素和目标元素key进行比较 7 array[mid]>key 时: end=mid-1 8 array[mid]<key 时:start=mid+1 9 array[mid]==key 时:mid就是要找的索引 10 11 4.循环执行2.3步骤,直到start>end结束。如果没有找到返回-1
1 public class ArrayDemo1 { 2 public static void main(String[] args) { 3 int[] array = {1, 2, 3, 4, 5, 6, 7, 8}; 4 5 //调用二分查找的方法 6 int index = binarySearch(array, 9); 7 System.out.println(index); 8 } 9 10 //需求:查找数组中指定元素出现的索引 11 public static int binarySearch(int[] array, int key) { 12 //1.计算开始索引和结束索引 13 int start = 0; 14 int end = array.length - 1; 15 //如果start <= end;就可以一直找 16 while (start <= end) { 17 //2.计算中的索引 mid = (start+end)/2; 18 int mid = (start + end) / 2; 19 // 3.让中间元素和目标元素key进行比较 20 if (array[mid] > key) { 21 //array[mid]>key 时: end=mid-1 22 end = mid - 1; 23 } else if (array[mid] < key) { 24 //array[mid]<key 时:start=mid+1 25 start = mid + 1; 26 } else { 27 //array[mid]==key 时:mid就是要找的索引 28 return mid; 29 } 30 } 31 //如果没有找到,就返回-1 32 return -1; 33 } 34 }
冒泡排序的规则:
1.相邻两个元素两两比较,小的放前面,大的放后面。
2.一共比较的轮数是n-1轮
3.每一轮比较,要上前一轮少一次
1 //对元素进行排序 2 public static void sort(int[] array) { 3 //1.确定比较的轮数,长度-1 4 for (int i = 0; i < array.length - 1; i++) { 5 //2.每一轮比较的次数,比前一轮少1次 6 for (int j = 0; j < array.length - 1 - i; j++) { 7 //3.每一轮相邻的两个元素进行比较,大的往后的,小的往前放 8 if (array[j] > array[j + 1]) { 9 int temp=array[j]; 10 array[j]=array[j+1]; 11 array[j+1]=temp; 12 } 13 } 14 } 15 }
快速排序的思路:
1.把0索引的元素确定为基准数
2.从右往左找比基准数小的
3.从左往右找比基准数大的
4.把左右两边的数据交换
5.基准数归位
1 public class ArrayDemo3 { 2 public static void main(String[] args) { 3 int[] array = {6, 8, 7, 5, 3, 4, 2}; 4 quiteArray(array, 0, array.length - 1); 5 6 //遍历数组中的元素,并打印 7 String s = Arrays.toString(array); 8 System.out.println(s); 9 } 10 11 public static void quiteArray(int[] array, int left, int right) { 12 //递归的出口 13 if (right < left) { return; } 14 //先记录开始索引和结束索引的位置 15 int left0 = left; 16 int right0 = right; 17 //定义基准数 18 int baseNumber = array[left0]; 19 while (left != right) { 20 //从右往左,找比基准数小的 21 while (array[right] >= baseNumber && right > left) { 22 right--; 23 } 24 //从左往右,找比基准数大的 25 while (array[left] <= baseNumber && right > left) { 26 left++; 27 } 28 //把左右两边的数据进行交换 29 int temp = array[left]; 30 array[left] = array[right]; 31 array[right] = temp; 32 } 33 //把left位置的元素放在left0位置 34 array[left0] = array[left]; 35 //基准数放在left位置 36 array[left] = baseNumber; 37 //左右两部分分别快速排序 38 quiteArray(array, left0, left - 1); 39 quiteArray(array, right + 1, right0); 40 } 41 }

浙公网安备 33010602011771号