Java实现冒泡排序

使用冒泡排序算法实现对数据的升序排列。
原理说明:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
//首先定义一个数组
int[] arr={5,2,7,6,4,9,3};
for(int i=0;i<a1.length-1;i++){
			for(int j=0;j<a1.length-1-i;j++){
				if(a1[j]>a1[j+1]){
					int t=a1[j];
					a1[j]=a1[j+1];
					a1[j+1]=t;
				}
				for(int n:a1){
					System.out.print(n+",");
				}
				System.out.println();
			}
			for(int n:a1){
				System.out.print(n+"----");
			}
			System.out.println();
		}
		//打印输出排序结果
		for(int i=0;i<a1.length;i++){
			System.out.print(a1[i]+",");
		}

每趟排序所得结果:
2,5,7,6,4,9,3,
2,5,7,6,4,9,3,
2,5,6,7,4,9,3,
2,5,6,4,7,9,3,
2,5,6,4,7,9,3,
2,5,6,4,7,3,9,
第一趟:2----5----6----4----7----3----9----
2,5,6,4,7,3,9,
2,5,6,4,7,3,9,
2,5,4,6,7,3,9,
2,5,4,6,7,3,9,
2,5,4,6,3,7,9,
第二趟:2----5----4----6----3----7----9----
2,5,4,6,3,7,9,
2,4,5,6,3,7,9,
2,4,5,6,3,7,9,
2,4,5,3,6,7,9,
第三趟:2----4----5----3----6----7----9----
2,4,5,3,6,7,9,
2,4,5,3,6,7,9,
2,4,3,5,6,7,9,
第四趟:2----4----3----5----6----7----9----
2,4,3,5,6,7,9,
2,3,4,5,6,7,9,
第五趟:2----3----4----5----6----7----9----
2,3,4,5,6,7,9,
第六趟:2----3----4----5----6----7----9----
2,3,4,5,6,7,9,

字符串反转实现:

通过二分法实现字符串的反转问题:
public static void main(String[] args) {
    String s = "abcde";
    int start = 0;
    int end = s.length() - 1;
    char[] charArray = s.toCharArray();
    while (start < end) {
        //交换首尾char值
        char c = charArray[end];
        charArray[end] = charArray[start];
        charArray[start] = c;
        start++;
        end--;
    }
    System.err.println(new String(charArray));
}

二分查找(Binary Search)

算法描述:
● 二分查找也称折半查找,它是一种效率较高的查找方法,要求列表中的元素首先要进行有序排列。
● 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
● 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
● 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

  /** 
   * @author : atguigu.com
   * @since 2019/7/22 
   */
  public class BinarySearch {
      /** 
       * 二分查找 时间复杂度O(log2n);空间复杂度O(1) 
       * 
       * @param arr     被查找的数组 
   	   * @param left 
       * @param right 
       * @param findVal 
       * @return 返回元素的索引 
       */
      public static int binarySearch(int[] arr, int left, int right, int findVal) {

          if (left > right) {//递归退出条件,找不到,返回-1  
              return -1;
          }

          int midIndex = (left + right) / 2;

          if (findVal < arr[midIndex]) {//向左递归查找  
              return binarySearch(arr, left, midIndex, findVal);
          } else if (findVal > arr[midIndex]) {//向右递归查找  
              return binarySearch(arr, midIndex, right, findVal);
          } else {
              return midIndex;
          }
      }

      public static void main(String[] args) {
          //注意:需要对已排序的数组进行二分查找  
          int[] data = {- 49, -30, -16, 9, 21, 21, 23, 30, 30
      };
      int i = binarySearch(data, 0, data.length, 21);
      System.out.println(i);
  }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值