java数据结构和算法-1,简单排序

在java数据结构和算法中,简单排序分为冒泡排序、选择排序、插入排序三种,也是最基础的三种,
废话不多,码上见!
1、冒泡排序

public class BubbleSort{
	
	public static void sort(int[] arr){
		//临时变量,用于数据交换,如果不用临时变量的话用运算符或者增加操作步骤也能实现;
		int temp = 0;
		//一个for循环用于遍历一次数组中的数据
		for (int i = 0; i < arr.length -1; i++) {
			//第二个for循环为了让每一个数组中的数据都去对比一次数组中的数据,初学的时候不知道为什么就是不会!!!太笨了~(* ̄ω ̄)~
			for (int j = arr.length -1; j > i; j--) {
				if (arr[j] < arr[i]) {//正在往上冒的数据如果遇到小于它的数据就交换位置
					temp = arr[j];
					arr[j] = arr[i];
					arr[i] = temp;
				}
			}
		}
		//打印排序后的数据
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
			
		}
	}
	public static void main(String[] args) {
		int[] arr = {23,43,5,71};//声明一个int类型数组,用于排序
		sort(arr);//执行排序方法
	}
}

输出结果:

5
23
43
71

重点:

  1. 数据从底部开始往上排
  2. 遇到比自身大的数继续排,直到遇到小于等于自身的数为止

2、插入排序

	//这次没有另外写方法了,直接放main里
	public static void main(String[] args) {
		int[] arr = {19,65,1,8,33,45,21,6};//声明一个int类型数组,用于排序
		int temp = 0;//临时变量用于交换数据
		int k = 0;//起到游标的作用,记录需要插入的位置
		for (int i = 1; i < arr.length; i++) {
			k = i;
			temp = arr[i];//记录正在排序的那个数
			while(k > 0 && temp <= arr[k-1]){//判断从后往前正在排序的那一个是否已经到头了,以及判断前一个数是否比自身大
				arr[k] = arr[k-1];//把比temp大的数往后移
				k--;//记录当前数据往后移之后,“空出来的”,需要插入的位置
			}
			arr[k] = temp;//最后把数据放到需要的插入的位置
		}
		//打印排序后的结果
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

输出结果

1
6
8
19
21
33
45
65

重点:

  1. 插入排序是从第二个数开始排的,用第二个数开始,然后和前面的数进行比较,并不是和冒泡一样比较所有的数。
  2. 插叙排序的效率比冒泡要高,因为不用每个数据都和数组中的数据对比一遍
  3. 其实和冒泡差不多,只是冒泡是每比较一次数据就交换一次,这里插入排序一轮比较之后交换的次数是1,其他的都是把前面的数移动到了后面,没有数据交换。

3、选择排序

	public static void sort(int[] arr){
		int k;//起到游标的作用,记录要交换的位置
		int temp;//临时变量用于交换数据
		for (int i = 0; i < arr.length; i++) {
			k = i;//记录开始的时候要排序的数所在的位置
			for (int j = i; j < arr.length; j++) {//从当前位置(arr[k])往后比较
				if (arr[j]<arr[k]) {//在比较数据的时候如果遇到后面的数比自身小,就记录后面的数的位置
					k = j;
				}
			}
			temp = arr[i];//在最后执行数据交换
			arr[i] = arr[k];
			arr[k] = temp;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
			
		}
	}
	
	public static void main(String[] args) {
		int[] arr = {9,15,4,2,99};//声明一个int类型数组,用于排序
		sort(arr);  
	}

输出结果

2
4
9
15
99

重点:

  1. 和插入排序一样需要有游标
  2. 排序中比较完数据之后不作数据交换的操作,而是记录要交换的位置
  3. 效率在这三个中最高,因为全程执行的数据交换操作最少
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值