image.png

1.排序

1.1将数组元素正序(从小到大)排列

  1. 1Arrays.sort(int[] a)
  2. 这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。
  3. 2Arrays.sort(int[] a, int fromIndex, int toIndex)
  4. 这种形式是对数组部分排序,也就是对数组a的下标从fromIndextoIndex-1的元素排序,
  5. 注意:下标为toIndex的元素不参与排序哦!

1.2数组反转

  1. package kuaisupaixu;
  2. import java.util.Arrays;
  3. public class Test {
  4. public static void main(String[] args) {
  5. int[] arr = {24, 69, 80, 57, 13};
  6. //数组排列
  7. Arrays.sort(arr);//13,24,57,69,80
  8. //将数组按照从大到小的顺序排列
  9. /*//第一种方法:数组正序排列后将数组从最后一个开始遍历
  10. int[] brr=new int[5];
  11. for (int i = arr.length-1,j=0; i >=0 ; i--,j++) {
  12. brr[j]=arr[i];
  13. System.out.print(brr[j]+"\t");
  14. }*/
  15. //第二种
  16. for (int i = 0; i < arr.length/2 ; i++) {
  17. int temp=arr[i];
  18. arr[i]=arr[arr.length-1-i];
  19. arr[arr.length-1-i]=temp;
  20. }
  21. for (int i = 0; i < arr.length ; i++) {
  22. System.out.print(arr[i]+"\t");
  23. }
  24. }
  25. }

2.二分查找

  1. package erfenchazhao;
  2. /**
  3. * @author Lynn
  4. * @create 2020-12-05-18:07
  5. */
  6. public class Test {
  7. public static void main(String[] args) {
  8. //二分查找
  9. //前提:所要查找的数组必须有序
  10. int[] arr = {-99, 47, 5, 6, -32, 8, 1, 54};
  11. //要查找的数--8
  12. int dest = 9;
  13. int head = 0;//初始的首索引
  14. int end = arr.length - 1;//初始的末索引
  15. boolean flag=true;
  16. while (head <= end){
  17. int middle=(head+end)/2;
  18. if (dest==arr[middle]){
  19. flag=false;
  20. System.out.println(dest+"的索引值为:"+middle);
  21. break;
  22. }else if(arr[middle]>dest){
  23. end=middle-1;
  24. }else {
  25. head=middle+1;
  26. }
  27. }
  28. if(flag){
  29. System.out.println("没有这个数!");
  30. }
  31. }
  32. }

3.冒泡排序

原理:对一个数组的元素两两(相邻的)进行比较,最大的数放在数组最右边
image.png

  1. package maopaopaixu;
  2. import java.security.PublicKey;
  3. /**
  4. * @author Lynn
  5. * @create 2020-12-05-14:18
  6. */
  7. public class ArrayDemo {
  8. public static void main(String[] args) {
  9. int[] arr = {24, 69, 80, 57, 13};
  10. System.out.println("排序前:" + arrToString(arr));
  11. /*
  12. //第一次比较--arr.length-1防止索引越界
  13. for (int i = 0; i < arr.length-1-0; i++) {
  14. if (arr[i]>arr[i+1]){
  15. int temp=arr[i];
  16. arr[i]=arr[i+1];
  17. arr[i+1]=temp;
  18. }
  19. }
  20. System.out.println("第一次比较后:"+arrToString(arr));
  21. //第二次比较--arr.length-1-1第一次比较后,最后一个数不用再次比较
  22. for (int i = 0; i < arr.length-1-1; i++) {
  23. if (arr[i]>arr[i+1]){
  24. int temp=arr[i];
  25. arr[i]=arr[i+1];
  26. arr[i+1]=temp;
  27. }
  28. }
  29. System.out.println("第二次比较后:"+arrToString(arr));
  30. //第三次比较--arr.length-1-2第二次比较后,最后两个数不用再次比较
  31. for (int i = 0; i < arr.length-1-2; i++) {
  32. if (arr[i]>arr[i+1]){
  33. int temp=arr[i];
  34. arr[i]=arr[i+1];
  35. arr[i+1]=temp;
  36. }
  37. }
  38. System.out.println("第三次比较后:"+arrToString(arr));
  39. //第四次比较--arr.length-1-3第三次比较后,最后三个数不用再次比较
  40. for (int i = 0; i < arr.length-1-3; i++) {
  41. if (arr[i]>arr[i+1]){
  42. int temp=arr[i];
  43. arr[i]=arr[i+1];
  44. arr[i+1]=temp;
  45. }
  46. }
  47. System.out.println("第四次比较后:"+arrToString(arr));*/
  48. //代码优化
  49. //外层for循环是需要比较的次数:arr.length-1
  50. for (int i = 0; i < arr.length-1 ; i++) {
  51. for (int j = 0; j < arr.length-1-i ; j++) {
  52. if (arr[j]>arr[j+1]){
  53. int temp=arr[j];
  54. arr[j]=arr[j+1];
  55. arr[j+1]=temp;
  56. }
  57. }
  58. }
  59. System.out.println("排序后:"+arrToString(arr));
  60. }
  61. //把数组中的元素按照指定的规则组成一个字符串:[元素1,元素2····]
  62. public static String arrToString(int[] arr) {
  63. StringBuilder sb = new StringBuilder();
  64. sb.append("[");
  65. for (int i = 0; i < arr.length; i++) {
  66. if (i == arr.length - 1) {
  67. sb.append(arr[i]);
  68. } else {
  69. sb.append(arr[i]).append(",");
  70. }
  71. }
  72. sb.append("]");
  73. return sb.toString();
  74. }
  75. }