笔记——Java排序算法,复习用(1)

1.冒泡排序:

冒泡排序是相邻的两个数进行比较,然后参与比较的两个数按照排序要求交换位置;

实现代码:

int[] maoPao = new int[10];
		for(int i = 0;i<maoPao.length;i++){
			maoPao[i] = random.nextInt(10000);
			System.out.print(maoPao[i] + " ");//输出排序前的数组
		}
		System.out.println();
		for(int i = 0;i<maoPao.length - 1;i++){
			for(int j = 0;j<maoPao.length-1-i;j++){
				if(maoPao[j] > maoPao[j+1]){//判断两个相邻元素的大小并交换位置
					int temp = maoPao[j+1];
					maoPao[j+1] = maoPao[j];
					maoPao[j] = temp;
				}
			}
		}
		for(int i = 0;i<maoPao.length;i++){//输出排序后的结果
			System.out.print(maoPao[i] + " ");
		}

2.选择排序:

选择排序的原理是在数组中找到一个最小(或最大)的元素,把它放在第一个位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序。

与冒泡排序不同的是,选择排序只在每轮比较结束的时候执行一次交换元素位置;冒泡排序是每次比较都要判断是否要交换元素位置。选择排序中通过元素下标交换元素位置,而冒泡排序中是直接交换元素的值;

实现代码:

int[] xuanZe = new int[10];
		for(int i = 0;i<xuanZe.length;i++){
			xuanZe[i] = random.nextInt(10000);
			System.out.print(xuanZe[i] + " ");
		}
		System.out.println();
		for(int i = 0;i<xuanZe.length-1;i++){
			int max = 0;//默认第一个值是最大值
			int last = xuanZe.length-1-i;//每轮比较的最后位置
			for(int j = 0;j<xuanZe.length-i;j++){
				if(xuanZe[max]<xuanZe[j]){
					max = j;
				}
			}
			if(max != last){//判断最大时是否在最后位置,如果是,则不需要交换
				int temp = xuanZe[last];
				xuanZe[last] = xuanZe[max];
				xuanZe[max] = temp;
			}
		}
		for(int i = 0;i<xuanZe.length;i++){
			System.out.print(xuanZe[i] + " ");
		}

3.插入排序:

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

实现代码:

int[] chaRu = new int[10];
		for(int i = 0;i<chaRu.length;i++){
			chaRu[i] = random.nextInt(10000);
			System.out.print(chaRu[i] + " ");
		}
		System.out.println();
		for(int i = 0;i<chaRu.length-1;i++){
			int temp = chaRu[i+1];//把需要排序的元素提取出来
			int j = 0;
			for(j = i; j>=0 ; j--){
				if(temp<chaRu[j]){
					chaRu[j+1] = chaRu[j];//把比提取出来元素大的往后移一个位置,原位置空出
				}else{
					break;
				}
			}
			chaRu[j+1] = temp;//因为在内循环执行break之前,执行了一次j--,
                              //所以实际上空出的位置是j+1
		}
		for(int i = 0;i<xuanZe.length;i++){
			System.out.print(chaRu[i] + " ");
		}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值