java中的经典排序

一、冒泡排序

//冒泡排序
public class BubbleSort {
	public static void main(String[] args) {
		// 声明数组
		int arr[] = new int[20];
		// 随机产生20个数字
		for (int i = 0; i < arr.length; i++) {
			// 产生1~100之间的数字
			arr[i] = (int) (Math.random() * 100 + 1);

		}
		System.out.println("原数组是:");
		for (int i = 0; i < arr.length; i++) {

			System.out.print(arr[i] + "\t");
			// 判断,每5个换行
			if ((i + 1) % 5 == 0) {
				System.out.println();
			}
		}
		// 外层循环控制提交的轮数
		for (int i = 0; i < arr.length - 1; i++) {
			// 内层控制比较的次数
			for (int j = 0; j < arr.length - 1 - i; j++) {
				// 比较,交换元素
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
		System.out.println("----------------------------------------");
		System.out.println("排序后的数组:");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + "\t");
			// 判断,每5个换行
			if ((i + 1) % 5 == 0) {
				System.out.println();
			}
		}

	}
}

二、比较排序

/**
 * 比较排序
 * 
 *
 */
public class Test2{

	public static void main(String[] args) {
		
		//声明数组中
		int[] arr = new int[20];
		//遍历数组, 随机生成元素内容
		for (int i = 0; i < arr.length; i++) {
			//生成1~100的随机数
			arr[i] = (int) (Math.random()*100 + 1);
		}
		//输出初始内容
		System.out.println("原数组内容如下:");
		for (int i = 0; i < arr.length; i++) {
			
			//输出元素内容
			System.out.print(arr[i] + "\t");
			
			//判断是否换行
			if(i%5 == 4) { //(i+1)%5==0
				System.out.println();
			}
		}
		System.out.println("===========================================");
		
		/* 升序排列 */
		//外层循环, 决定比较的轮次, 决定每轮需要确定的元素的下标
		for (int i = 0; i < arr.length-1; i++) {
			//内层循环, 决定每轮比较时, 用于和i进行比较的下标的起止
			for (int j = i+1; j < arr.length; j++) {
				//比较, 将较小的元素交换到下标i中
				if(arr[i] > arr[j]) {
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		//输出结果
		System.out.println("排序后的数组内容如下:");
		for (int i = 0; i < arr.length; i++) {
			
			//输出元素内容
			System.out.print(arr[i] + "\t");
			
			//判断是否换行
			if(i%5 == 4) { //(i+1)%5==0
				System.out.println();
			}
		}
		System.out.println("===========================================");
	}
}

三、插入排序


/**
 * 插入排序
 * 基于插入算法的排序
 *
 *
 */
public class Test3{

	public static void main(String[] args) {
		
		//声明数组中
		int[] arr = new int[20];
		//遍历数组, 随机生成元素内容
		for (int i = 0; i < arr.length; i++) {
			//生成1~100的随机数
			arr[i] = (int) (Math.random()*100 + 1);
		}
		//输出初始内容
		System.out.println("原数组内容如下:");
		for (int i = 0; i < arr.length; i++) {
			
			//输出元素内容
			System.out.print(arr[i] + "\t");
			
			//判断是否换行
			if(i%5 == 4) { //(i+1)%5==0
				System.out.println();
			}
		}
		System.out.println("===========================================");
		
		/* 插入排序, 升序 */
		/*
		 * 将数组划分成两个部分, 已经排序的部分, 和没有排序的部分
		 * 依次从未排序的数组中取出元素, 按照插入算法, 插入已经排序的数组部分 
		 */
		//外层循环, 确定每次需要插入的元素的下标
		for (int i = 1; i < arr.length; i++) {
			//内存循环, 遍历已经排序的数组的所有元素, 与需要插入的元素比较, 确定插入的具体效果
			for (int j = 0; j < i; j++) {
				
				//判断, i下标的元素比j下标的元素小时, 交换
				if(arr[i] < arr[j]) {
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		//输出结果
		System.out.println("排序后的数组内容如下:");
		for (int i = 0; i < arr.length; i++) {
			
			//输出元素内容
			System.out.print(arr[i] + "\t");
			
			//判断是否换行
			if(i%5 == 4) { //(i+1)%5==0
				System.out.println();
			}
		}
		System.out.println("===========================================");

	}
}

四、算法题

要求:n个人排成一圈进行报数,报的次数为m,报到编号m时,m出列,剩下的人继续报数,求最后剩下的报数人的编号?

如:n:1、2、3、4、5(人)

m:4(次)

第一次出列:4

第二次出列:3

第三次出列:5

第四次出列:2

最后剩下人编号:1

代码如下:

//报数
public class Test4 {
	public static void main(String[] args) {
		
		Scanner input=new Scanner(System.in);
		List<Integer> list=new ArrayList<Integer>();
		System.out.println("请输入报数的人数:");
		int n=input.nextInt();
		System.out.println("请输入报数的次数:");
		int m=input.nextInt();
		//拿到人数的编号
		for (int i = 1; i <=n; i++) {
			list.add(i);
		}
		//计数器
		int  count=0;
		
		//报数,直到剩下一人为止
		while(list.size()>1) {
			//
			for (int i = 0; i <list.size(); i++) {
				//计数开始
				count++;	
				//判断,当计数器等于报的次数时
				if(count==m) {
					//出列的数:移除出来
					System.out.println("出列的数:"+list.remove(i));
					//计数器归0
					count=0;
					//下标还原
					i--;
				}
			}
		}
		System.out.println("剩下人的编号:"+list.get(0));
	}
}

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值