【学习笔记】java 实现冒泡排序
2017-03-14 22:57
183 查看
import java.util.Random; public class maopaopaixu{ public static void main(String[] args) { Random random=new Random(); int[] a=new int[10]; System.out.print("排序前:"); for(int i=0;i<a.length;i++){ a[i]=random.nextInt(50); System.out.print(a[i]+" "); } for(int i=0;i<a.length-1;i++){ boolean exchanged=false; for(int j=0;j<a.length-i-1;j++){ if(a[j]>a[j+1]){ int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; exchanged=true; } } if(exchanged==false){ break; } } System.out.print("\n排序后:"); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } }
以前学习冒泡排序的时候都是直接记的代码,忘了再去找找。
现在理解了一下。
所以冒泡排序可以这么理解:
q:在n无序个数字中,每次找出一个最大的数,要找多少轮?
a:每轮找出一个最大的数,n个数,需要找n-1次。
q:每轮如何找到最大的数呢?
a:
第一轮:确定最大的数字
位置一上的数个与位置二上的数比较,谁大,谁占位置二;位置二上的数个与位置三上的数比较,谁大,谁占位置三。……位置n-1上的数个与位置n上的数比较,谁大,谁占位置n;第一轮过后,位置n上的数字,即为该序列中最大的数字。
第二轮:确定第二大的数字。(即为n-1个数中找最大)
位置一上的数个与位置二上的数比较,谁大,谁占位置二;位置二上的数个与位置三上的数比较,谁大,谁占位置三。……位置n-2上的数个与位置n-1上的数比较,谁大,谁占位置n-1;第二轮过后,位置n-1上的数字,即为该序列中第二大的数字。
依次类推。。。。。。
所以
只进行一轮,只能找最大的数
import java.util.Random; public class maopaopaixu{ public static void main(String[] args) { Random random=new Random(); int[] a=new int[10]; System.out.print("排序前:"); for(int i=0;i<a.length;i++){ a[i]=random.nextInt(50); System.out.print(a[i]+" "); } for(int i=0;i<1;i++){//只进行一轮,只能找最大的数。 //for(int i=0;i<2;i++){//进行二轮,能找出最大和第二大的数 boolean exchanged=false; for(int j=0;j<a.length-i-1;j++){ if(a[j]>a[j+1]){ int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; exchanged=true; } } if(exchanged==false){ break; } } System.out.print("\n排序后:"); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } }
同理
找二轮,只能找出最大,和第二大数字。
去看源码:第一个for循环。确定找的轮数。
后面一个for。为了在每轮中找道最大的数字。
其中 a.length-i-1
是因为找了一轮就确定了当前序列中最大的数字。
下一轮再找最大的数字时,就需要去掉上一轮中以确定的最大的数。
综上所述:
第一步:找多少轮(确定排多少个数)。
第二部:在该轮中找出当前序列的最大数并确定位置。**
相关文章推荐
- 学习笔记:冒泡排序的C++、JavaScript、Java实现
- JAVA学习笔记---java语言实现冒泡排序,选择排序,反转排序
- Java IO 实现文件复制 -Java 学习笔记 (25)
- 关于java打印功能的最简单实现的学习笔记
- Java学习笔记——文本操作(记事本实现)
- java学习笔记——自定义实现Stack集合
- 学习java笔记 --- 一个实现Iterable<E>接口的小范例
- 链栈实现算法 - Java 学习笔记(26)
- Java学习笔记---字符串操作(人民币大写转换的实现)
- Java学习笔记——文本操作(记事本实现)
- Java学习笔记(三)Map接口及其重要实现类的用法
- java学习笔记—自定义实现linkedList集合
- 用JS实现移动的窗口 - 流星絮语 JAVA学习笔记 - CSDNBlog
- Java学习笔记之 swing 基本实现QQ截屏功能
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- Java 线程同步问题 生产者-消费者 算法实现 -Java学习笔记(29)
- java学习笔记:【从网络获取图像资源】实现
- 设计模式学习笔记以及java代码实现
- Java与Flex学习笔记(9)----用ExternalInterface实现Flex与外部容器交互
- 基于JAVA的水泥三维图像特征提取系统设计与实现 之一 JAVA 3D学习笔记