冒泡排序 & 插入排序 & 选择排序

文章详细介绍了三种基础的排序算法,包括冒泡排序、插入排序和选择排序的原理及Java实现。冒泡排序通过多次循环将最大值沉底;插入排序是从后往前遍历,将每个元素插入到已排序序列的正确位置;选择排序则是找到剩余未排序部分的最小值并放到正确位置。
摘要由CSDN通过智能技术生成

升序排序

冒泡排序:

        每次循环把最大值沉到最底下。       

循环n-1次,外层i从1循环到n,内层j从0循环到n-i。每次判断a[j]和a[j+1]大小关系,小的放前面。这样最大的数就会被放到a[len-1] (第一次循环 i=1,j=len-2,j+1=len-1.)

	public static void BubbleSort(int[] a) {
		//冒泡排序 每次排序将最大的数沉到最后
		//循环i-1
		//外层从1循环到len 内层从0循环到len-i
		for(int i=1;i<a.length;i++) {
			//j从0开始循环到len-1(后i个已经排好序,不用动)
			for(int j=0;j<a.length-i;j++) {
				if(a[j]>a[j+1]) {
					int temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			}
			System.out.println(Arrays.toString(a));
		}
	}

插入排序 

        只看前i个,从后往前遍历,第i次排序只把下标为i的数插入到前面排序好的序列中,后面的数向后挪一位。

       记录要插入的的元素数值。循环n-1次,i从1开始循环,每次看a[i]之前有没有比a[i]大的,有的话插入a[i]

	public static void InsertSort(int[] a) {
		//插入排序:排序len-1轮,从后往前遍历,第i次排序只把下标为i的数插入到前面排序好的序列中,后面的数向后挪一位。
		//循环n-1次
		//从1下标开始排序 外层从1循环到len 内层从i-1循环到0
		for(int i=1;i<a.length;i++) {
			int min=a[i]; //记录当前要插入的数
			int j=i-1;
			for(;j>=0&&a[j]>min;j--) {
				//遍历数组,如果当前遍历的数大于min,就和min交换位置
				a[j+1]=a[j];
			}
			//遍历完后j+1即为a[i]要插入的位置
			a[j+1]=min;
			System.out.println(Arrays.toString(a));
		}
	}

选择排序

        找i-len-1中的最小值,第i趟排序把i之后元素的最小值放到a[i]。

	public static void SelectedSort(int[] a) {
		//选择排序:第i趟排序把i之后元素的最小值放到a[i]
		//循环len-1轮 
		//外层从0循环到len-1 内层从i+1循环到len
		for(int i=0;i<a.length-1;i++) {
			//记录最小值的下标
			int idx=i;
			//从i往后开始寻找比i数值更小的下标idx
			for(int j=i+1;j<a.length;j++) {
				//寻找i之后最小值的下标
				if(a[j]<a[idx]) {idx=j;}
			}
			//交换最小的下标idx元素和i下标元素
			int t=a[i];
			a[i]=a[idx];
			a[idx]=t;
			System.out.println(Arrays.toString(a));
		}
	}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值