冒泡排序,选择排序,快速排序,堆排序与二分查找算法

拼搏现实的明天。 2022-08-18 00:55 258阅读 0赞
  1. public class Test {
  2. public static void main(String[] args) {
  3. int arr[] = { 5, 2, 3, 1, 4, -4, 6, 2 };
  4. // arr = sort1(arr);
  5. // arr = sort2(arr);
  6. //arr = sort3(arr, 0, arr.length - 1);
  7. arr = sort4(arr);
  8. for (int i = 0; i < arr.length; i++) {
  9. System.out.println(arr[i]);
  10. }
  11. System.out.println("下标是:" + binarySearch(arr, 1));
  12. }
  13. // 冒泡排序
  14. public static int[] sort1(int[] arr) {
  15. for (int i = 0; i < arr.length - 1; i++) {
  16. for (int j = 0; j < arr.length - i - 1; j++) {
  17. if (arr[j] > arr[j + 1]) {
  18. int temp = arr[j];
  19. arr[j] = arr[j + 1];
  20. arr[j + 1] = temp;
  21. }
  22. }
  23. }
  24. return arr;
  25. }
  26. // 选择排序
  27. public static int[] sort2(int[] arr) {
  28. for (int i = 0; i < arr.length; i++) {
  29. int min = i;
  30. for (int j = i + 1; j < arr.length; j++) {
  31. if (arr[min] > arr[j]) {
  32. min = j;
  33. }
  34. }
  35. if (i != min) {
  36. int temp = arr[min];
  37. arr[min] = arr[i];
  38. arr[i] = temp;
  39. }
  40. }
  41. return arr;
  42. }
  43. // 快速排序
  44. public static int[] sort3(int arr[], int l, int r) {
  45. if (l < r) {
  46. int i = l, j = r, x = arr[l];
  47. while (i < j) {
  48. while (i < j && arr[j] >= x) {// 从向左找出第一个小于x的数并交换
  49. j--;
  50. }
  51. if (i < j) {
  52. arr[i++] = arr[j];
  53. }
  54. while (i < j && arr[i] < x) {
  55. i++;
  56. }
  57. if (i < j) {
  58. arr[j--] = arr[i];
  59. }
  60. }
  61. arr[i] = x;
  62. sort3(arr, l, i - 1);
  63. sort3(arr, i + 1, r);
  64. }
  65. return arr;
  66. }
  67. // 堆排序
  68. //3.交换
  69. public static void swap(int i, int j, int[] arr) {
  70. int temp = arr[i];
  71. arr[i] = arr[j];
  72. arr[j] = temp;
  73. }
  74. //2.排序
  75. public static int[] sort4(int arr[]) {
  76. for (int i = 0; i < arr.length - 1; i++) {
  77. buildMaxHeap(arr, arr.length - i - 1);
  78. swap(0, arr.length - i - 1, arr);
  79. }
  80. return arr;
  81. }
  82. //1.构建最大堆
  83. public static void buildMaxHeap(int[] array, int lastIndex) {
  84. for (int i = (lastIndex - 1) / 2; i >= 0; i--) {
  85. // 记录当前的节点
  86. int k = i;
  87. // 说明有左孩子
  88. while (2 * k + 1 <= lastIndex) {
  89. int bigIndex = 2 * k + 1;
  90. // 说明有右孩子
  91. if (bigIndex < lastIndex) {
  92. if (array[bigIndex] < array[bigIndex + 1]) {
  93. bigIndex++;
  94. }
  95. }
  96. if (array[bigIndex] > array[i]) {
  97. swap(k, bigIndex, array);
  98. k = bigIndex;
  99. } else {
  100. break;
  101. }
  102. }
  103. }
  104. }
  105. // 二分查找
  106. public static int binarySearch(int arr[], int v) {
  107. int l = 0;
  108. int r = arr.length - 1;
  109. while (l < r) {
  110. int m = (l + r) / 2;
  111. if (arr[m] == v) {
  112. return m;
  113. } else if (arr[m] < v) {
  114. l = m + 1;
  115. } else if (arr[m] > v) {
  116. r = m - 1;
  117. }
  118. }
  119. return -1;
  120. }
  121. }

发表评论

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

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

相关阅读