三大简单排序-----冒泡、选择、插入

三大简单排序-----冒泡、选择、插入

冒泡排序

经过一轮排序之后,就会有一个数被放到正确的位置上,若目标序列是从小到大的顺序,那么第一轮排序结

束之后,最大的数会被放到最后,第二轮排序之后,次大的数字就被放到了倒数第二个,以此类推……

时间复杂度为O(n^2)
public class Test {
	public static void main(String []agrs) {
		int[] arr=new int[]{20,32,25,66,24,35,85,11};
		int temp;
		for(int i=0;i<arr.length;i++) {
			boolean flag=true;
			for(int j=0;j<arr.length-1-i;j++) {
				if(arr[j]>arr[j+1]) {
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
					flag=false;
				}
			}
			//当flag为true时,表示这一轮没有交换,若一次交换都没有表示已经排好序了
			if(flag) {
				break;
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

选择排序

每一轮标记最小的的值,并将它放在指定的位置,若目标序列是从小到大的顺序,那么第一轮结束之后,最

小的值会放在第一位,第二轮结束之后,次小的值会放在第二位,以此类推……

时间复杂度为O(n^2)
public class Test {
	public static void main(String []agrs) {
		int[] arr=new int[]{20,32,25,66,24,35,85,11};
		int temp,k;
		for(int i=0;i<arr.length;i++) {
			k=i;
			for(int j=i+1;j<arr.length;j++) {
			//k用来标记最小的值
				if(arr[j]<arr[k]) {
					k=j;
				}
			}
			if(arr[k]!=arr[i]) {
				temp=arr[k];
				arr[k]=arr[i];
				arr[i]=temp;
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

插入排序

设置一个变量temp用来标记要插入的对象,将数组分为两个部分,前半部分在排序的过程中元素个数由1变成

n,后半部分则由n-1变成0;前半部分是已经排好序的,在每一轮中从后半部分没有排好序的数据中取出一个

数据,将其插入到前半部分中适当的位置(每一轮中的j+1为最后要插入的位置,temp为要插入的数据)若要

插入的数据小于arr[j],就将temp对应索引位置的前面位置的数据依次后移,最终j+1为要插入的位置。

时间复杂度为O(n^2)
public class Test {
	public static void main(String []agrs) {
		int[] arr=new int[]{20,32,25,66,24,35,85,11};
		int temp,j;
		for(int i=1;i<arr.length;i++) {
			j=i-1;
			temp=arr[i];
			while(j>-1&&temp<arr[j]) {
				arr[j+1]=arr[j];
				j--;
			}
			arr[j+1]=temp;
		}
		System.out.println(Arrays.toString(arr));
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值