Java SE 037 交换排序快速排序

(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

Java SE 037 交换排序快速排序

1.交换排序

(1)交换排序是一个大的类,在数据结构里面,冒泡排序也是一种交换,第一个与第二个,第二个与第三个。
(2)交换是指第一个与第二个换,第一个与第三个换、第一个与第四个换,这样一换之后,最小的或者说最大的元素就出来了。出来之后拿第二个与第三个,第二个与第四个比较,依次循环比较并交换位置。

2.快速排序

快速排序也是交换排序的一种,因为它也涉及到大量元素的交换。
1.首先找到索引最低的元素,索引最大的元素。
2.一次排序之后,我找的那个值,比这个值小的放到这个值的左边,比这个值大的,放到这个值的右边,换句话说,我从这里面可以随便找一个值。第一次是将比找的这个值小的放在左边,比找的这个值大的放在右边。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.关于JDK中范围取值的一些方式

JDK里面有很多方法,可以返回一个范围当中的某一个数值。很多方法都是这样的,后面还会经常遇到。它都有一个统一的规律,即返回的这个值,如果是一个范围的话,它一定是大于等于小的,小于那个大的。都是这样一个规律。不包含小于大的那个。对于随机数Random中的nextInt()方法也是一样的,它大于等于0,小于那个大的。

3.1 产生随机数方式1

import java.util.Random;

public class RandomTest2{
    
    
	public static void main(String[] args){
    
    
		Random random = new Random();

		for(int i = 0 ; i < 50 ; i ++){
    
    
			//random.nextInt()方法,不管传入的数是什么,它产生的数字一定是从0开始的,包含0,不包含传入的数。我想产生一个介于[10,50]之间的数,10是0+10就可以了,所以
			//在这个地方可以产生一个0-40之间的随机数。0-40之间再加上一个10就变成了10-50之间了。如果产生0-40之间的随机数,则需要在nextInt()参数中传递一个41进去,即
			//nextInt(41); 10是一个确定的值,加上一个随机的值,还是一个随机的值。
			System.out.println(random.nextInt(41)+10);
		}
	}
}

java.lang.Math
0.0 <= n <1.0
生成[10,50]之间的随机数

0.0 <= n <41.0
转成整数
0 <= n <41
两边加10
10 <= n < 51
10 <= n <=50

3.2产生随机数方式2

import java.util.Random;

public class RandomTest2
{
    
    
	public static void main(String[] args){
    
    
		Random random = new Random();

		for(int i = 0 ; i < 50 ; i ++){
    
    
			//random.nextInt()方法,不管传入的数是什么,它产生的数字一定是从0开始的,包含0,不包含传入的数。我想产生一个介于[10,50]之间的数,10是0+10就可以了,所以
			//在这个地方可以产生一个0-40之间的随机数。0-40之间再加上一个10就变成了10-50之间了。如果产生0-40之间的随机数,则需要在nextInt()参数中传递一个41进去,即
			//nextInt(41); 10是一个确定的值,加上一个随机的值,还是一个随机的值。
			System.out.println(random.nextInt(41)+10);
		}
	}
}

3.3作业

(1)随机生成50个数字(整数),每个数字的范围是[10,50],统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来,如果某个数字出现次数为0,则不要打印它。打印时按照数字的升序排列。

import java.util.Random;
/**
随机生成50个数字(整数),每个数字的范围是[10,50],统计每个数字出现的次数以
及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来,如果某
个数字出现次数为0,则不要打印它。打印时按照数字的升序排列。

数字界于10-50之间,因此最多可出现41种数字,但是一共要生成50个数字,产生的种
类是41种,也就是说产生的数字当中肯定会有重复的,50个数字里面要有41种,至少有
几个数字是重复出现的。
int[] count = new int[41];
这个就是统计的是产生的每一种数字,因为要统计它出现的次数,所以存放的是每一种数据。
*/
public class RandomTest4
{
    
    
	public static void main(String[] args){
    
    
		int[] count = new int[41];

		Random random = new Random();

		for(int i = 0 ; i < 50; i++){
    
    
		  int number = random.nextInt(41)+10;//产生一个基于[10,50]之间的随机数。
		  System.out.println(number);
		  //与它关联的,这个数字到底要出现多少次,一个是作为数组索引的信息,另外
		  //是作为数组索引处那个值的信息给保存起来。
		  count[number-10]++;//如果一个数字出现了一次,则将数组当中的第一个元素它
		  //的个数加1 number-10,为什么要减10,因为它正好是从10开始的。而数组索引
		  //正好是从0开始的,换句话说count[0]这个元素,存放的是数字10的出现次数,
		  //count[1]这个元素,存放的是数字11出现的次数,依次类推,count[40]这个元
		  //素存放的是50这个数字出现的次数。
		  //count 是一个整型数组,不需要给它指定初始值,生成的时候,每一个元素的值
		  //都为0,直接++就可以了。++就表示在原来的基础上加1,所以现在就通过一个数组
		  //的索引以及数组索引对应的值的信息把需要的两个信息全都给保存起来了。不需要
		  //定义第二个数组。			 
		}

		 //统计每个数字出现的次数
		  for(int i = 0 ; i < count.length ; i ++){
    
    
			//注意:每一个数字是数组当中元素索引对应的value.
			//每一个数字可以从索引处得到。
			
			if(0 == count[i]){
    
    
				continue;
			}
			System.out.println((10+i)+"出现次数:  "+count[i]);
		  }

		  //找到出现次数最多的数字
		  //首先要找到哪个数字出现次数最大,可以用Arrays里面的max方法,找到最大的数字,
		  //也可以通过先排序,排序之后找到索引最大的元素,排完序之后找到索引最大的元素,
		  //或者也可以一个个的去比较,按照线性的方式一个个去比较,如何比呢?
		  //开始认为数组当中第一个元素的值是最大的,把这个元素存放到一个变量里面,然后
		  //拿这个变量跟第二个元素比,如果第二个元素大于这个变量,就将第二个元素赋给这
		  //个变量。然后跟第三个比,一直比到最后一个。这个变量值就是最大的。
		  int max = count[0];
		  for(int i = 0 ; i < count.length; i++){
    
    
			if(max < count[i]){
    
    
				max = count[i];
			}
		  }

		  System.out.println("出现的最大次数为:"+max +"次");

		  //打印出这个数字是谁
		  for(int i = 0; i < count.length; i++){
    
    
			if(max == count[i]){
    
    
				System.out.println(i+10);
			}
		  }
	}
}

猜你喜欢

转载自blog.csdn.net/xiogjie_67/article/details/108501200