三种排序方式

冒泡,选择,插入排序

public class Buble {

	public static void main(String[] args) {
		//创建一维数组
				int[]arr={11,4,7,2,55,9};
				System.out.println("冒泡排序后数据为");
				bubble(arr);
				list(arr);
				System.out.println();
				int[]arr1={3,6,1,98,7,66,2};
				System.out.println("选择排序后数据为");
				select(arr1);
				list(arr1);
				System.out.println();
				int[]arr2={11,32,1,3,76,8,56};
				System.out.println("插入排序后数据为");
				insert(arr2);
				list(arr2);

	}

	private static void insert(int[] arr2) {
		//外层控制轮
				for(int i=0;i<arr2.length-1;i++){
					//内层控制次数
					for(int j=i+1;j>0;j--){
						if(arr2[j]<arr2[j-1]){
							change(j,j-1,arr2);
						}else{
							break;
						}
					}
				}
		
	}

	private static void select(int[] arr1) {
		// 外层控制轮数
		for (int i = 0; i < arr1.length-1; i++) {
			//内层控制次数
			int t = i;
			for (int j = i+1; j < arr1.length; j++) {
				if(arr1[t]>arr1[j]){
					t = j;
				}
			}
				if(t!=i){
					change(t,i,arr1);
				
			}
		}
		
	}

	private static void list(int[] arr) {
		//遍历数组,输出数组
		for (int i : arr) {
			System.out.print(i+" ");
		}
		
	}

	private static void bubble(int[] arr) {
		//外层控制轮数
		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]){
					//两个数位置互换
					change(j,j+1,arr);
				}
				
			}
		}
		
	}

	private static void change(int i, int j, int[] arr) {
		// 交换两个数的位置
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;	
	}

}

总结

冒泡排序的思路

冒泡就像鱼吐得泡泡一样,泡泡越来越大,连起来看就是小泡泡在下面,大泡泡在上面。联想到数字就是大的数字在上面,小的数在下面。给你一个串数字,根据冒泡排序的方法演示就是这样的 假如有这样的数字11,4,7,2,55,9。
第一次比较 : 4,7,2,11,9,55 就是两个数两两比较
第二次比较 : 4,2,7,9,11 由于最大的数已经出来就不用比较最后一个了
第三次比较 : 2,4,7,9
第四次比较 : 2,4,7
第五次比较 : 2,4
第六次比较 : 2
其实最后一次就没进入循环,因为一共6个数,前五个大的数都找出来了,自然而然最小的数也出来了。

选择排序

选择排序,就是先拿出一个数,假设是最小的数,一个一个的跟后面的数进行比较。找到最小的数,由于是在数组中操作的。所以我们只需记住这个数的下标,当比较完毕,看看这个下标跟之前假设最小值的下标是否相等,不相等,让他们两个数进行交换。

插入法排序

插入法排序,先让两个数进行排序,当第三个数进来时,只需要跟第二个数比较,当它大于最二个数是,直接插入这个数的后面。当它小于第二个数时,依次跟前两个数比较。后面的数也是这样跟前面的数进行比较。
总的来说,后面两种方法都是根据冒泡排序方法延伸而来,主要是考虑到效率问题,后面的方法相对于冒泡来说依次少比较了很多次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值