Java实现冒泡排序

冒泡排序

需求 :将一组数据按照升序顺序排序

解决思路:

第一步:寻找最大值并将其放在最后面
第二步:将第一步寻找到的最大值去掉后继续第一步 (循环数组长度-1次)
第三步:完成排序

寻找最大值并将其放在最后面


int num[] = {3,2,0,5,4,1};
int centerNum = 0;//中间变量 用于存放较大的值
for (int j = 0; j< num.length-1; j++) {//将最大值放到数组的最后面
				if(num[j]>num[j+1]) {
					centerNum=num[j];
					num[j] = num[j+1]; 
					num[j+1] = centerNum;
				}	
			}

第二步:将第一步寻找到的最大值去掉后继续第一步 (循环数组长度-1次)

for (int i = 0; i < num.length-1; i++) {//循环数组长度-1次
			for (int j = 0; j< num.length-i-1; j++) {//每次结束后去掉已经找出的最大值
				if(num[j]>num[j+1]) {
					centerNum=num[j];
					num[j] = num[j+1]; 
					num[j+1] = centerNum;
				}	
			}
		}

冒泡排序实现

package com.qingsu.basis;

import java.util.Scanner;

public class Array {
	
	public static void main(String[] arsg) {
		//冒泡排序
		
		int num[] = {3,2,0,5,4,1};
		int centerNum = 0;//中间变量 用于存放较大的值
		 
        for (int i = 0; i < num.length-1; i++) {//循环数组长度-1次
			for (int j = 0; j< num.length-i-1; j++) {//每次结束后去掉已经找出的最大值
				if(num[j]>num[j+1]) {
					centerNum=num[j];
					num[j] = num[j+1]; 
					num[j+1] = centerNum;
				}	
			}
			System.out.print("第"+(i+1)+"次数值比较排序结果:");
			for (int k = 0; k < num.length; k++) {
				System.out.print(num[k]+"\t");		
			}
			System.out.println();
		}
		 
		//分析 3,2,0,5,4,1
		//第一次数值比较循环 比较5次 3>2  ==> 2 3  |  3>0 ==>2 0 3 |  3<5 ==>2 0 3 5 | 5>4 ==>2 0 3 4 5 | 5>1==>2 0 3 4 1 5    
        //2 0 3 4 1 5
		//第二次数值比较循环 比较4次 2>0  ==> 0 2  |  2<3 ==>0 2 3 |  3<4 ==>0 2 3 4 | 4>1 ==>0 2 3 1 4 |                                 
        //0 2 3 1 4 5 
		//第三次数值比较循环 比较3次 0<2  ==> 0 2  |  2<3 ==>0 2 3 |  3>1 ==>0 2 1 3                                                                
        //0 2 1 3 4 5
        //第四次数值比较循环 比较2次 0<2  ==> 0 2  |  2>1 ==>1 2                                                                                              
        //0 1 2 3 4 5
        //第五次数值比较循环 比较1次 0<1  ==> 0 1                                                                                                                   
        //0 1 2 3 4 5	


        System.out.print("最终排序结果:");
        for (int i = 0; i < num.length; i++) {
			int j = num[i];
			System.out.print(num[i]+"\t");
		}
	
	}

}

打印台输出结果
在这里插入图片描述
分析 以{3,2,0,5,4,1}为例

初始数据3 2 0 5 4 1
进行第一次最大值寻找并置后循环 内层循环共比较5次
        第一次比较:3>2 数组顺序交换后的结果 2 3 0 5 4 1
        第二次比较:3>0 数组顺序交换后的结果 2 0 3 5 4 1
        第三次比较:3<5 数组顺序不变后的结果 2 0 3 5 4 1
        第四次比较:5>4 数组顺序交换后的结果 2 0 3 4 5 1
        第五次比较:5>1 数组顺序交换后的结果 2 0 3 4 1 5

去掉第一次寻找的最大值5 进行第二次最大值并置后循环 内层循环共比较4次
        第一次比较:2>0 数组顺序交换后的结果 0 2 3 4 1 (5)
        第二次比较:2<3 数组顺序不变后的结果 0 2 3 4 1 (5)
        第三次比较:3<4 数组顺序不变后的结果 0 2 3 4 1 (5)
        第四次比较:4>1 数组顺序交换后的结果 0 2 3 1 4 (5)

去掉第二次寻找的最大值4 进行第三次最大值并置后循环 内层循环共比较3次
        第一次比较:0<2 数组顺序不变后的结果 0 2 3 1 (4) (5)
        第二次比较:2<3 数组顺序不变后的结果 0 2 3 1 (4) (5)
        第三次比较:3>1 数组顺序交换后的结果 0 2 1 3 (4) (5)

去掉第三次寻找的最大值3 进行第四次最大值并置后循环 内层循环共比较2次
        第一次比较:0<2 数组顺序不变后的结果 0 2 1 (3) (4) (5)
        第二次比较:2>1 数组顺序交换后的结果 0 1 2 (3) (4) (5)

去掉第四次寻找的最大值2 进行第五次最大值并置后循环 内层循环共比较1次
        第一次比较:0<1 数组顺序不变后的结果 0 1 (2) (3) (4) (5)

排序完成

外层循环数据

第1次:2 0 3 4 1 5
第2次:0 2 3 1 4 5
第3次:0 2 1 3 4 5
第4次:0 1 2 3 4 5
第5次:0 1 2 3 4 5

由上数据可知 冒泡排序每次的目标是寻找本次循环的最大值 并将其置后

排序算法

int temp; 
for(int i=0;i<array.length-1;i++){//趟数 
	for(int j=0;j<array.length-i-1;j++){//比较次数 
		if(array[j]>array[j+1]){
			 temp=array[j]; 
			 array[j]=array[j+1]; 
			 array[j+1]=temp; 
			} 
		} 
	}

Java排序API
在现实开发中我们不会真的写一个排序算法进行排序 我们通常使用API进行数据的排序
比如 数据的升序
我们便使用Arrays.sort(num);进行升序排序

package com.qingsu.basis;

import java.util.Arrays;
public class Array {
	
	public static void main(String[] arsg) {
		//排序API
		int num[] = {655,55,1,3,6645,52};
		Arrays.sort(num);
		for (int i : num) {
			System.out.println(i);			
		}
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值