Java--冒泡、选择排序,二分查找

╰+哭是因爲堅強的太久メ 2023-10-17 10:59 90阅读 0赞

一、冒泡排序,选择排序,二分查找

  1. package com.cat.stringbuffer;
  2. public class BubbleSort {
  3. public static void main(String[] args) {
  4. //排序
  5. int[] array = {33,11,22,55,44};
  6. bubbleSort(array);//冒泡排序
  7. selectSort(array);//选择排序
  8. //二分查找
  9. int[] arr = {11,22,33,44,55,66,77,88};
  10. int i = binarySearch(arr,44);//二分查找
  11. System.out.print("二分查找索引:" + i);
  12. }
  13. //二分查找
  14. private static int binarySearch(int[] arr,int value) {
  15. int min = 0;
  16. int max = arr.length - 1;
  17. int mid = (min + max) / 2;
  18. while (arr[mid] != value) {
  19. if(arr[mid] < value){ //中间值 < 指定要找值,最小索引 min = mid + 1
  20. min = mid + 1;
  21. }else if(arr[mid] > value){ //中间值 > 指定要找值,最大索引 max = mid - 1
  22. max = mid - 1;
  23. }
  24. mid = (min + max) / 2;
  25. if(min > max){
  26. return -1;
  27. }
  28. }
  29. return mid;
  30. }
  31. //选择排序
  32. public static void selectSort(int[] array) {
  33. /*
  34. * 选择排序
  35. * 用一个索引位置上的元素,依次和其他索引位置上的元素比较,小的在前,打的在后
  36. * 第一次:array[0]分别与array[1-4]比较4次
  37. * 第二次:array[1]分别与array[2-4]比较3次
  38. * 第三次:array[2]分别与array[3-4]比较2次
  39. * 第四次:array[3]与array[4]比较1次
  40. * */
  41. System.out.println();
  42. for (int i = 0; i < array.length - 1; i++) { //外循环需要比较array.length - 1次
  43. for (int j = i+1 ; j < array.length; j++) {
  44. if (array[i] > array[j]) {
  45. int temp = array[i];
  46. array[i] = array[j];
  47. array[j] = temp;
  48. }
  49. }
  50. }
  51. System.out.println("选择排序:");
  52. for (int i = 0; i < array.length; i++) {
  53. System.out.print(array[i] + " ");
  54. }
  55. System.out.println();
  56. }
  57. //冒泡排序
  58. public static void bubbleSort(int[] array) {
  59. /*
  60. * 冒泡排序
  61. * 轻的上浮,沉的下降
  62. * 两个相邻位置比较,如果前面的元素比后面的大就换位置
  63. * 第一次:array[0]与array[1],array[1]与array[2],array[2]与array[3],array[3]与array[4]比较4次
  64. * 第二次:array[0]与array[1],array[1]与array[2],array[2]与array[3]比较3次
  65. * 第三次:array[0]与array[1],array[1]与array[2]比较2次
  66. * 第四次:array[0]与array[1]比较1次
  67. * */
  68. for (int i = 0; i < array.length - 1; i++) { //外循环需要比较array.length - 1次
  69. for (int j = 0; j < array.length - 1 - i; j++) { //-1防止数组越界,提高效率
  70. if (array[j] > array[j + 1]) {
  71. int temp = array[j];
  72. array[j] = array[j+1];
  73. array[j+1] = temp;
  74. }
  75. }
  76. }
  77. System.out.println("冒泡排序:");
  78. for (int i = 0; i < array.length; i++) {
  79. System.out.print(array[i] + " ");
  80. }
  81. }
  82. }

Center

冒泡排序原理:

Center 1

选择排序原理:

Center 2

二分查找原理:

Center 3

二、Java中有提供了一个Arrays类,JDK文档下解释如下:此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。

1、Arrays类概述
针对数组进行操作的工具类。
提供了排序,查找等功能。

2、成员方法
[1]public static String toString(int[] a)
[2]public static void sort(int[] a)
[3]public static int binarySearch(int[] a,int key)

  1. package com.cat.stringbuffer;
  2. import java.util.Arrays;
  3. public class ArraysDemo {
  4. public static void main(String[] args) {
  5. /*Arrays类的概述和方法使用)
  6. 1、Arrays类概述
  7. 针对数组进行操作的工具类。
  8. 提供了排序,查找等功能。
  9. 2、成员方法
  10. [1]public static String toString(int[] a)
  11. [2]public static void sort(int[] a)
  12. [3]public static int binarySearch(int[] a,int key)
  13. * */
  14. //数组转字符串
  15. int[] array = {33,11,22,55,44};
  16. System.out.println("数组转字符串:" + Arrays.toString(array));
  17. //排序
  18. Arrays.sort(array);
  19. System.out.println("排序:" + Arrays.toString(array));
  20. //二分查找
  21. int[] arr = {11,22,33,44,55,66,77};
  22. System.out.println("二分查找:" + Arrays.binarySearch(arr, 44));
  23. System.out.println("二分查找:" + Arrays.binarySearch(arr, 99)); //-插入点 - 1
  24. }
  25. }

发表评论

表情:
评论列表 (有 0 条评论,90人围观)

还没有评论,来说两句吧...

相关阅读