黑马程序员技术交流社区
标题: 冒泡排序法 [打印本页]
作者: 末日雨下 时间: 2018-4-8 08:36
标题: 冒泡排序法
数组中我们得到的一般都是一个无序的数组,那我们找最大值最小值或者第二大的值第二小的值,或者一些别的要求的值就非常麻烦。但是如果我们能把数组重新排序一下,从大到小或者从小到大,这样找起来就非常方便了。
package com.itheima;
import java.util.Random;
public class maopaofa {
public static void main(String[] args) {
//利用冒泡法找数组中第二大和第二小的数的值
//创建一个长度为10的int数组
int[] arr =new int[10];
//用Random产生1-100的随机数并用for循环给arr数组的每个元素赋值
Random r =new Random();
for (int i=0;i<10;i++) {
arr=r.nextInt(100)+1;
}
//遍历生成新数组
for(int a:arr) {
System.out.print(a+"\t");
}
//起泡排序
int temp=0;
//外层循环n-1次,
for (int i=0; i<arr.length-1;i++) {
//内层循环n-1-i,因为内循环完成第一次之后,把最大的一个数换到//了最后一个,第二次内循环是把第二大的数换到倒数第二个,所以内//循环的次数要减1。以此推论,后面每次内循环的循环次数就是前一//次内循环的次数减1,也就是减i.
for(int j=0; j<arr.length-1-i;j++) {
//如果前面大,就换到后面.循环外定义一个变量temp.如果前面//arr[j]大,把前面的值arr[j]赋值给temp.然后把后面的值赋值//arr[j+1]给前面arr[j],这样前面的值arr[j]被覆盖,变成了//后面的值。再把temp的值赋值给后面的arr[j+1]面,这样前后//两个的值发生互换,也就是把大的数换到了后面,小的数放到了前//面.
if (arr[j]> arr[j+1]) {
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("\r\n-----------------");
//再次遍历排序后的数组,可以看到是一个从小到大排列的数组
for(int a:arr) {
System.out.print(a+"\t");
}
System.out.println("\r\n-----------------");
//升序排序之后,再来求第二大和第二小的数。最大的数也就是排序后数组中最后一个数。
//最小的数就是数组中第一个数.分别赋值给secMax和secMin
int secMin=arr[0];
int secMax=arr[arr.length-1];
// 遍历数组,找到第一个大于secMin也就是arr[0]的数,就是第二小的数了,赋值给secMin。
//结束循环。那第二小的数就是secMin了。
for(int i=0;i<arr.length;i++){
if (arr>secMin){
secMin=arr;
break;
}
}
//反向遍历数组。找到第一个小于secMax也就是arr[arr.length-1]的数。就是第二大的数了。
//结束循环。那第二小的数就是secMax了。
for(int i=arr.length-2;i>=0;i--){
if (arr<secMax){
secMax=arr;
break;
}
}
//分别输出第二大和第二小的数。
System.out.println("数组中的第二大的数字为:"+secMax);
System.out.println("数组中的第二小的数字为:"+secMin);
}
}
最后测试一下看对不对。运行程序
排序前的数组是
98 10 8 37 58 19 31 6 21 37
-----------------
排序后的数组是
6 8 10 19 21 31 37 37 58 98
-----------------
数组中的第二大的数字为:58
数组中的第二小的数字为:8
再来测试一下
排序前的数组是
50 85 15 41 30 51 95 58 35 58
-----------------
排序后的数组是
15 30 35 41 50 51 58 58 85 95
-----------------
数组中的第二大的数字为:85
数组中的第二小的数字为:30
测试正确,没有问题。
作者: 小浙姐姐 时间: 2018-4-10 17:18
作者: esaygoing 时间: 2018-4-12 22:29
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |