day3 test02

package day3;

public class test02 {
	public static void main(String args[])
	{
		int[] arr = {38,12,1,189,456,237,98,199,7};
		System.out.println("排序前:");
		listArr(arr);
		
		System.out.println("选择排序后:");
		selectSort(arr);
		listArr(arr);
		
		
		System.out.println("冒泡排序后:");
		bubbleSort(arr);
		listArr(arr);
	
		System.out.println("插入排序后:");
		insertSort(arr);
		listArr(arr);
	}
	
	/*选择排序
	思路:
	1.定义一个循环,控制要排列的次数,每次搞定一个最大数
		假设用i来代表每次最大数摆放的位置,i的取值:0~length-2
	2.定义一个变量pos记住最大数所在的位置,定义一个变量max记住最大数
		max初始值为i位置的元素,pos初始值为i
	3.定义一个内层循环,用于遍历数组找最大数
		假设i位置的最大,找出i+1~length-1里面最大的比i还大的
		遍历数组,如果有比max大的,将值给max,同时用pos记住该元素的角标
	4.让最大数和i位置的元素交换
	*/
	static void selectSort(int[] arr)
	{
		//456,12,1,189,38,237,98,199,7
		for(int i=0; i<arr.length-1; i++)	//i: 1
		{
			int pos = 0;	// pos:4
			int max = arr[0];	//max:456
			//找最大数
			for(int j=0; j<arr.length-i; j++)	//j:8
			{
				if(arr[j]>max)	//
				{
					max = arr[j];
					pos = j;
				}
			}
			exchange(arr, arr.length-i-1, pos);
		}
	}
	
	/*冒泡排序
	思路:
	1.定义一个外层循环,每次搞定一个最小数,i为最小数的位置,i的取值:0~length-2
	2.定义一个内层循环,从数组的末尾开始向前冒泡,直到i+1的位置和i位置的元素进行完冒泡
		j的取值:length-1~i+1
	
	*/
	static void bubbleSort(int[] arr)
	{
		for(int i=0; i<arr.length-1; i++)
		{
			for(int j=arr.length-1; j>i; j--)
			{
				if(arr[j]<arr[j-1])
					exchange(arr, j, j-1);
			}
		}
	}
	
	/*插入排序
	思路:
	1.外层循环,每次搞定一个数(i)的位置,i的取值:1~length-1
	2.内层循环,让第i个数不断和前面的数比较,小就换位置,直到遇上前面一个元素比它还小就停
			还有,如果此元素被换到了第0个位置,也要停
	*/
	static void insertSort(int[] arr)
	{
		for(int i=1; i<arr.length; i++)
		{
			int pos = i;	//pos记住被插入的元素的角标
			while(pos>0&&arr[pos]<arr[pos-1])
			{
				exchange(arr, pos, pos-1);
				pos--;
			}
		}
	}
	
	//交换数组两个元素的位置
	static void exchange(int[] arr, int pos1, int pos2)
	{
		int temp = arr[pos1];
		arr[pos1] = arr[pos2];
		arr[pos2] = temp;
	}
	
	//输出数组的元素
	static void listArr(int[] arr)
	{
		StringBuffer sb = new StringBuffer();
		for(int i=0; i<arr.length; i++)
			sb.append(arr[i] + ",");
		sb.delete(sb.length()-1, sb.length());
		System.out.println(sb);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java代码实现: ```java import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CreateFiles { public static void main(String[] args) throws IOException { String basePath = "./day19/task02"; List<Map<String, String>> fileList = new ArrayList<>(); Map<String, String> file1 = new HashMap<>(); file1.put("name", "File类操作.avi"); file1.put("path", "./day19/task02/test01"); fileList.add(file1); Map<String, String> file2 = new HashMap<>(); file2.put("name", "File学习笔记.md"); file2.put("path", "./day19/task02/test01"); fileList.add(file2); Map<String, String> file3 = new HashMap<>(); file3.put("name", "任务作业.txt"); file3.put("path", "./day19/task02/test01"); fileList.add(file3); Map<String, String> file4 = new HashMap<>(); file4.put("name", "java学院-讲师上云-日期讲解.avi"); file4.put("path", "./day19/task02/test02"); fileList.add(file4); Map<String, String> file5 = new HashMap<>(); file5.put("name", "java学院-讲师上云-日期解析.avi"); file5.put("path", "./day19/task02/test02"); fileList.add(file5); Map<String, String> dir1 = new HashMap<>(); dir1.put("name", "test01"); dir1.put("path", "./day19/task02"); fileList.add(dir1); Map<String, String> dir2 = new HashMap<>(); dir2.put("name", "test02"); dir2.put("path", "./day19/task02"); fileList.add(dir2); Map<String, String> dir3 = new HashMap<>(); dir3.put("name", "task02"); dir3.put("path", "./day19"); fileList.add(dir3); for (Map<String, String> file : fileList) { String name = file.get("name"); String path = file.get("path"); File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } if (!name.contains(".")) { File subDir = new File(dir, name); subDir.mkdir(); } else { File subFile = new File(dir, name); subFile.createNewFile(); } } } } ``` 首先定义了一个basePath,即根目录的路径。然后创建了一个List,用于存储所有的文件和文件夹。 接下来添加了七个元素,其中五个是文件,两个是文件夹。每个元素都是以Map形式存储的,包含了元素的名称和路径。 接下来使用循环遍历所有的元素,先判断元素对应的目录是否存在,不存在则递归创建。然后判断元素是文件还是文件夹,如果是文件则创建文件,如果是文件夹则创建文件夹。 最终,执行代码后会在day19目录下创建task02目录,并在其中创建test01和test02两个子目录,以及相应的文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值