package cyz;
import java.util.Arrays;
//冒泡排序
public class Bubble_sort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arr=new int []{6,3,2,5,4,1};
/**
*算法分析:
*一开始我们定义的是6,3,2,5,4,1
*接下来我们以6这个最大的数作为基准进行所谓的,“冒泡”;
*"6",3,2,5,4,1 ( 这是一开始的定义的未进行排序)
*
* +第一层循环+ -------嵌套-------> +第二层循环+ --包含---> if语句
*确认第一个数的排序 第一次 3,"6",2,5,4,1
*确认第一个数的排序 第二次 3,2,"6",5,4,1
*确认第一个数的排序 第三次 3,2,5,"6",4,1
*确认第一个数的排序 第四次 3,2,5,4,"6",1
*确认第一个数的排序 第五次 3,2,5,4,1,"6"
*
*
*上述当中的这样子写的“6”,只是方便理解冒泡这个含义的所在
*
*
*首先我们看到我列出的数据有行和列这个含义,行为(确认第...个数的排序 ) 列为(第...次的 数据的每一次排序)
*只有通过每一次的(确认第...个数的排序---嵌套----->第...次):
*才能显示出对列的数据的排序
*因此行是列的前提,没有行的指引,就没有列的表达式,
*因此我们需要的是一个嵌套的循环进行代替行列之间的关系
*
*
*
*所以我们可以分析到一共有6个数据,可我们进行的是5次循环得到这种表达式:
*总的确认第几个数的排序的次数=数组当中的个数=arr.length-1
* 这个代表的是(确认第...个数的排序的次数) 就这样子我们把行确定了下来
*接下来我们就对列进行确定
*
*
*
*1.1因此就有一个问题,每一列到底发生什么关系?
*
*
*且看上述的数据 第一次,我们进行的是对数组第一个数和数组第二个数进行交换(其余位置的数据不动)
* 第二次,我们进行的是对数组第二个数和数组第三个数进行交换(其余位置的数据不动)
* 。。。。。 (其余位置的数据不动)
* 第五次,我们进行最后倒数第二个数和最后一个数进行交换 (其余位置的数据不动)
* 从数据上分析我们得到 有多个数据我们进行的是交换的次数=数据的长度-1=arr.length-1
*
*
*
*
*
*2.如何进行下一次的排序
*我们从上述的可得6最后确定的这时候的数据是 3 2 5 4 1 6
*因此以5这个数作为基准进行对第二大(在这六个数中次最大的数)的数进行排序
*3 2 5 4 1 6 (第二次的初始状态)
*
* +第一层循环+ -------嵌套-----> +第二层循环+ --包含---> if语句
*确认第二个数的排序 第一次 3 2 "5" 4 1 (6)
*确认第二个数的排序 第二次 3 2 "5" 4 1 (6)
*确认第二个数的排序 第三次 3 2 4 "5" 1 (6)
*确认第二个数的排序 第四次 3 2 4 1 "5" (6)
*上述当中的这样子写的“5”,只是方便理解冒泡这个含义的所在
*
*虽然我们可以分析到一共有6个数据,可是我们已经确定了最大值6的位置,所以我们得减去我们确定的值得个数,也就是(6)这个数
*相当于我们在原来的基础上6个数据上删除6这个数,只有5个数
*因此我们可以分析到 总的确认第几个数的排序的次数=数组当中的个数=arr.length-1 这个代表的是(确认第...个数的排序的次数)已经是固定下来了
*接下来就是确定对列的关系进行一步的分析
*
*第一次,我们进行的是对数组第一个数和数组第二个数进行交换(其余位置的数据不动)
* 第二次,我们进行的是对数组第二个数和数组第三个数进行交换(其余位置的数据不动)
* 。。。。。 (其余位置的数据不动)
* 第四次,我们进行最后倒数第三个数和倒数第二个数进行交换 (其余位置的数据不动)
*
* 与第一次相比
* 我们少了对倒数第二个数和最后一个数进行交换 这个环节(这是因为6这个最大值已经固定住了)
* 从数据上分析我们得到 有多个数据我们进行的是交换的次数=数据的长度-1-i=arr.length-1-i(此时虽然确定第二个数,可是i我是从0开始的,因此i为1,
* 代表我们在原来的基础上6个数据上删除6这个数,只有5个数
*
*
*第三次同第二次结论相同,且看下面示意图可得:
*一开始 3 2 "4" 1 (5)(6) (第三次的初始状态)
* * +第一层循环+ -------嵌套-----> +第二层循环+ --包含---> if语句
* 确认第三个数的排序 第一次 2 3 "4"1(5)(6)
* 确认第三个数的排序 第二次 2 3 "4" 1 (5)(6)
* 确认第三个数的排序 第三次 2 3 1 "4"(5)(6)
*
*第四次,第五次同理
*@author cyz
*/
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}