算分与数据结构 - 冒泡思想

本文介绍冒泡排序算法的实现,并提供一个示例代码。此外,还展示了一个字符串处理问题——如何保持字符相对位置不变的情况下,将大写字母移至字符串尾部,同样附带了实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡思想的一个特点是所有的操作都在原数组中进行,不占用额外的空间。

一、冒泡排序

public class BubbleSort {

    public void bubbleSort(int[] array) {
	int len = array.length;
	int temp;
	for (int i=0; i<len; i++) { // n趟越来越短的相邻位置的两两交换
	    for (int j=0; j<len-i-1; j++) { // 易错点 
		if (array[j] > array[j+1]) { 
		    temp = array[j+1];
		    array[j+1] = array[j];
		    array[j] = temp;
		}
	    }
	}
    }
	
    public static void main(String[] args) {
	int[] array = {1, 9, 2, 8, 3, 7, 4, 6, 5};
	new BubbleSort().bubbleSort(array);
	for (int i=0; i<array.length; i++)
	    System.out.print(array[i] + " ");
    }
	
}

二、冒泡整理

<span style="font-size:18px;">/**
 * 	问题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 
 * 	输入例子:AkleBiCeilD
 * 	输出例子:kleieilABCD
 * 
 * 	思路
 * 		遍历字符数组,如果位置i是小写字母,则与位置i前的所有大写字母冒泡式两两交换。
 * 		这样不仅不会占用额外空间,且字母间的次序不会改变。
 */

public class PutUppercaseBehind {

    public String putUppercaseBehind(String str) {
	char[] c = str.toCharArray(); // 转化为字符数组
	char temp;
	for (int i = 0; i < c.length; i++) {
	    if (c[i] >= 'a' && c[i] <= 'z') { // 寻找小写子母
		for (int j = i - 1; j >= 0; j--) { // 从i往前找大写字母
		    if (c[j] >= 'A' && c[j] <= 'Z') { // 发现一个大写字母就与c[i]两两交换
			temp = c[i];
			c[i] = c[j];
			c[j] = temp;
			i = j;
	            }
		}
            }
	}
        return String.valueOf(c); // 将字符数组通过String.valueof()转化为字符串
    }

    public static void main(String[] args) {
        String str = "AkleBiCeilD";
	System.out.println(new PutUppercaseBehind().putUppercaseBehind(str));
    }
}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值