JAVA从入门到精通------基础篇------数组排序

                     int[] arry = {20,15,98,35,46,87,14,26};

假设我们现在有一个名字为int 类型的数组 arry,我们想办法让他进行从小到大的排序

1、冒泡排序

从第一个数字开始,两两之间进行比较,如果数大就排到后边,数小就往前去

每一遍要排出最大的数

第一遍排出最大的数 放在最后

第二遍排出第二大的数 放在倒数第二个位置

.

.

.

20 15 98 35 46 87 14 26

第一回:

第一次   20和15比较   15 20 98 35 46 87 14 26

第二次   20和98比较   15 20 98 35 46 87 14 26

第三次   98和35比较   15 20 35 98 46 87 14 26

第四次   98和46比较   15 20 35 46 98 87 14 26

第五次   98和87比较   15 20 35 46 87 98 14 26

第六次   98和14比较   15 20 35 46 87 14 98 26

第七次   98和26比较   15 20 35 46 87 14 26 98

第一回一共排了 7 次

第一回排完的结果为   15 20 35 46 87 14 26 98

第二回

第一次   15和20比较   15 20 35 46 87 14 26 98

第二次   20和35比较   15 20 35 46 87 14 26 98 

第三次   35 和46比较  15 20 35 46 87 14 26 98

第四次   46和87比较   15 20 35 46 87 14 26 98

第五次   87和14比较   15 20 35 46 14 87 26 98

第六次   87和26比较   15 20 35 46 14 26 87 98

第二回一共排了 6 次

第二回排完的结果为   15 20 35 46 14 26 87 98

第三回

第一次  15和20比较   15 20 35 46 14 26 87 98

第二次   20和35比较  15 20 35 46 14 26 87 98

第三次   35和46比较  15 20 35 46 14 26 87 98

第四次   46和14比较  15 20 35 14 46 26 87 98  

第五次   46和26比较  15 20 35 14 26 46 87 98

第三回一共排了 5 次

第三回排完的结果为   15 20 35 14 26 46 87 98

第四回

第一次   15和20比较   15 20 35 14 26 46 87 98

第二次   20和35比较   15 20 35 14 26 46 87 98

第三次   35和14比较   15 20 14 35 26 46 87 98 

第四次   35和26比较   15 20 14 26 35 46 87 98

第四回一共排了 4 次

第四回排完的结果为   15 20 14 26 35 46 87 98

第五回

第一次   15和20比较   15 20 14 26 35 46 87 98

第二次   20和14比较   15 14 20 26 35 46 87 98

第三次   20和26比较   15 14 20 26 35 46 87 98

第五回一共排了 3 次

第五回排完的结果为   15 14 20 26 35 46 87 98

第六回

第一次   15和14比较   14 15 20 26 35 46 87 98

第二次   15和20比较   14 15 20 26 35 46 87 98

第六回一共排了 2 次

第六回排完的结果为   14 15 20 26 35 46 87 98

第七回

第一次   14和15比较   14 15 20 26 35 46 87 98

第七回一共排了 1 次

第七回排完的结果为   14 15 20 26 35 46 87 98

【注意】就剩下一个14了所以他就是最小的

在这个有8个元素的数组当中,我们一共排了7回,

第一回   7次

第二回   6次

第三回   5次

第四回   4次

第五回   3次

第六回   2次

第七回   1次

我们运用嵌套for循环的理念,一个控制回------一共控制次   就可以进行排序了

我们写排序算法能用的东西只有,数组长度   循环定义的变量,通过它们三个找规律

public class Demo2 {

	//冒泡排序
	public static void main(String[] args) {
		
		int[] arry = {20,15,98,35,46,87,14,26};
		
		//控制回
		for (int i=0; i<arry.length-1; i++) {
			//控制次
			for(int j=0;j<arry.length-1-i;j++) {
				
				//如果后边的数大于前边的数
				if(arry[j] > arry[j+1]) {
					
					//定义一个变量temp,接收前边的数
					int temp = arry[j];
					//把后边的数赋值给前边的数
					arry[j] = arry[j+1];
					//把大的数也就是temp给后边的数
				    arry[j+1] = temp;	
				    
				}
				
			}
		}
		
		System.out.println("排序之后的结果");
		
		for(int i=0;i<arry.length-1;i++) {
			
			System.out.print(arry[i] + " ");
			
		}
		
	}

}


2、选择排序

从第一个数开始,只用第一个数去和后边的每一个数去进行比较(冒泡排序是相邻两个数两两之间进行比较),如果后边的数比他小就放到前边,再拿这个更小的数去和后边的数比较,直至比完找出第一个小的数,再拿第二个数去依次比较,选择排序排升序是从最小的找,一直找到最大的,(冒泡排序排升序是从最大的找,一直找到最小的)

每一遍要排出最小的数

第一遍排出最小的数 放在最前

第二遍排出第二小的数 放在第二个位置

.

.

.

20 15 98 35 46 87 14 26

第一回:

第一次   20和15比较   20 15 98 35 46 87 14 26

第二次   15和98比较   15 20 98 35 46 87 14 26

第三次   15和35比较   15 20 98 35 46 87 14 26

第四次   15和46比较   15 20 98 35 46 87 14 26

第五次   15和87比较   15 20 98 35 46 87 14 26

第六次   15和14比较   15 20 98 35 46 87 14 26

第七次   14和26比较   14 20 98 35 46 87 15 26

第一回一共排了 7 次

第一回排完的结果为   14 20 98 35 46 87 15 26

第二回

第一次   20和98比较   14 20 98 35 46 87 15 26

第二次   20和35比较   14 20 98 35 46 87 15 26 

第三次   20 和46比较  14 20 98 35 46 87 15 26

第四次   20和87比较   14 20 98 35 46 87 15 26

第五次   20和15比较   14 20 98 35 46 87 15 26

第六次   15和26比较   14 15 98 35 46 87 20 26

第二回一共排了 6 次

第二回排完的结果为   14 15 98 35 46 87 20 26

第三回

第一次   98和35比较  14 15 98 35 46 87 20 26

第二次   35和46比较  14 15 35 98 46 87 20 26

第三次   35和87比较  14 15 35 98 46 87 20 26

第四次   35和20比较  14 15 35 98 46 87 20 26

第五次   20和26比较  14 15 20 98 46 87 35 26

第三回一共排了 5 次

第三回排完的结果为   14 15 20 98 46 87 35 26

第四回

第一次   98和46比较   14 15 20 98 46 87 35 26

第二次   46和87比较   14 15 20 46 98 87 35 26

第三次   46和35比较   14 15 20 46 98 87 35 26

第四次   35和26比较   14 15 20 35 98 87 46 26

第四回一共排了 4 次

第四回排完的结果为   14 15 20 26 98 87 46 35

第五回

第一次   98和87比较   14 15 20 26 98 87 46 35

第二次   87和46比较   14 15 20 26 87 98 46 35

第三次   46和35比较   14 15 20 26 46 98 87 35

第五回一共排了 3 次

第五回排完的结果为   14 15 20 26 35 98 87 46

第六回

第一次   98和87比较   14 15 20 26 35 98 87 46

第二次   87和46比较   14 15 20 26 35 87 98 46

第六回一共排了 2 次

第六回排完的结果为   14 15 20 26 35 46 98 87

第七回

第一次   98和87比较   14 15 20 26 35 46 98 87

第七回一共排了 1 次

第七回排完的结果为   14 15 20 26 35 46 87 98

【注意】就剩下一个98了所以他就是最大的

在这个有8个元素的数组当中,我们一共排了7回,

第一回   7次

第二回   6次

第三回   5次

第四回   4次

第五回   3次

第六回   2次

第七回   1次

此时的这个次数  代表和后边的每一个数进行比较(前边固定的时候就不看了) 

一共比较了多少次那也可以说后边有多少个数

因为每有一个数就需要比较一次

所以多少次就证明后边有多少个要比较的数

次数和要比较的数的个数是相等的

运用for循环原理外层控制回,内层控制当前元素和后边比较的元素的个数

//选择排序
public class Demo9 {
	public static void main(String[] args) {
		int[] arry = {20,15,98,35,46,87,14,26};
		
		//控制当前的轮回数
		for (int i = 0; i < arry.length-1; i++) {
			
			//控制和后边比较数的个数			
			// j+1 :后边要比较的第一个数
			//arry.length:后边比较数的个数
			for (int j=i+1; j < arry.length; j++) {
				
				//前边的数大于后边的数
				//j会一直自加,直至把后边每一个数遍历完
				if(arry[i] > arry[j]) {
					
					//设定一个temp变量接收arry[i]的值
					int temp = arry[i];
					
					//把后边大的数给前边的数
					arry[i] = arry[j];
					
					//把temp的值给后边
					arry[j] = temp;
					
					
				}
			}
		}
		
		System.out.println("排序之后的结果");
		for(int newArry : arry) {
			System.out.print(newArry + " ");
		}
	}
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值