java基础08—冒泡算法

冒泡排序

排序:选择排序、插入排序、快速排序

冒泡排序:升序

​ 1、相邻两数比较,小的在前,大的在后,如果不符合条件,就交换;

​ 2、直到不需要再交换为止

len = 6

第一趟:比较5次,挑出1个最大数;

第二趟:比较4次(5个数),

第三趟:比较3次(4个数),

第四趟:比较2次(3个数),

第五趟:比较1次(2个数),

外层循环范围:趟数 i [0,4];

内层循环范围:比较的次数 j [0,4-i];

int[] nums = { 13, 2, 45, -23, 29, 100 };
		int len = nums.length;
		for (int i = 0; i < len - 1; i++) {
			for (int j = 0; j < len - 1 - i; j++) {
				// 相邻比较,不符合则交换
				if (nums[j] > nums[j + 1]) {
					int temp = nums[j];
					nums[j] = nums[j + 1];
					nums[j + 1] = temp;
				}
			}
		}
		for (int i : nums) {
			System.out.print(i + " ");
		}

插入:

public class Test4 {
	public static void main(String[] args) {
		/**
		 * 1.确定插入点的为止, 
		 * 2.[len-2,index]依次往后移 
		 * 3.nums[index]=n
		 */
		int[] nums = new int[7];
		nums[0] = 12;
		nums[1] = 23;
		nums[2] = 36;
		nums[3] = 60;
		nums[4] = 98;
		nums[5] = 102;

		int n = 48;
		int len=nums.length;
		//1.确认插入点的位置index
		int index = nums.length - 1;
		for (int i = 0; i < nums.length - 1; i++) {
			if (nums[i] > n) {
				index = i;
				break;
			}
		}
		//2.[len-2,index]依次往后移
		for (int i = len-2; i>=index; i--) {
			nums[i+1]=nums[i];
		}
		//3.nums[index]=n
		nums[index]=n;
		
		for (int i : nums) {
			System.out.print(i+" ");
		}
	}
}

作业

/*
 *   一组乱序的字符序列m,b,p,f,a,u,z,
 *   请用冒泡排序算法,使之按字母表顺序排列
 */
public class GoHome {

	public static void main(String[] args) {
		char[] nums = { 'm', 'b', 'p', 'f', 'a', 'u', 'z' };
		int len = nums.length;
		for (int i = 0; i < len - 1; i++) {
			boolean flag = true;// true 交换 false 没有交换
			for (int j = 0; j < len - 1 - i; j++) {
				if (nums[j] > nums[j + 1]) {
					char temp = nums[j];
					nums[j] = nums[j + 1];
					nums[j + 1] = temp;
					flag = false;
				}
			}
			if (flag) {
				break;
			}
		}
		for (char c : nums) {
			System.out.print(c + " ");
		}
	}
}

在这里插入图片描述


/*
 *一组有序的字符序列a,b,c,e,f,p,u,z,
 * 向次字符序列中插入一个新的字符,要求插入之后字符序列仍保持有序
 */
import java.util.Scanner;
public class GoHome1 {
	public static void main(String[] args) {
		char[] nums= {'a','b','c','e','f','p','u','z'};
		char[] numn = new char[9];//开一个新的数组
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个字符:");
		char a= sc.next().charAt(0);
		int len = nums.length;//空间长度
		int index = nums.length-1;
		for (int i = 0; i < nums.length-1; i++) {
			if(nums[i]>a) {
				index = i;
				break;
			}
		}
		for (int i = 0; i <=index-1; i++) {//[0,index] 之前的数
			numn[i]=nums[i];
		}
		numn[index]=a;
		for (int i = index; i <=len-1 ; i++) {//[index,len-1]的数
			numn[i+1] = nums[i];
		}
		for (char c : numn) {
			System.out.print(c+" ");
		}
	}
}

在这里插入图片描述

/*
 * 判断一个数组是否有序
 * 
 */
public class GoHome2 {
	public static void main(String[] args) {
		int[] nums = { 1, 2, 3, 4, 5, 6 };
		int len = nums.length;
		int count = 0;
		int count1 = 0;
		for (int i = 0; i < len - 1; i++) {
			if (nums[i] > nums[i + 1]) {
				count++;
			}
			if (nums[i] < nums[i + 1]) {
				count1++;
			}
		}
		if (count == len - 1 || count1 == len - 1) {
			System.out.println("此数组为有序数组");
		} else {
			System.out.println("此数组为不有序数组");
		}
	}
}


/*
 * 判断一个数组是否有序
 * 
 */
public class GoHome23 {
	public static void main(String[] args) {
		int[] nums = { 1, 2, 3, 4, 5, 6 };
		int len = nums.length;
		boolean flag = false;
		if (nums[0] > nums[nums.length - 1]) {
			for (int i = 0; i < len - 1; i++) {
				if (nums[i] < nums[i + 1]) {
					flag = true;
					break;
				}
			}
		} else {
			for (int i = 0; i < len - 1; i++) {
				if (nums[i] > nums[i + 1]) {
					flag = true;
					break;
				}
			}
		}
		if (!flag) {
			System.out.println("此数组为有序");
		} else {
			System.out.println("此数组为无序");
		}
	}
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值