基于Java的排序算法的数据分析(冒泡排序)

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));
 
 
 
 
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值