您的位置:首页 > 编程语言 > Java开发

【学习笔记】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

是因为找了一轮就确定了当前序列中最大的数字。

下一轮再找最大的数字时,就需要去掉上一轮中以确定的最大的数。

综上所述:

第一步:找多少轮(确定排多少个数)

第二部在该轮中找出当前序列的最大数并确定位置。**
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 冒泡排序