美文网首页
冒泡排序

冒泡排序

作者: 随便都赢 | 来源:发表于2020-09-09 10:08 被阅读0次

冒泡排序(Bubble Sort)顾名思义它是一种排序,而且要冒泡。
那怎么冒泡呢。冒泡[排序算法的原理如下:
Step 1、从数组的第一个元素开始向后,让相邻的两个元素进行比较如果前一个比后一个大就进行交换。(这样一轮之后数组中最大的值就会跑到数组的最后面,好了现在数组最后面的数字已经排完序了,就像水里的泡泡一样冒出来消失不用去管他)
Step 2、重复上面步骤一直到数组排列完成。
下面实现Step 1

int a[]={7,2,4,8,6,1,3,5};//准备一个乱序数组
int temp=0;//准备一个交换用的临时变量
//开始交换
for (int k=0;k<a.length-1;k++){//与后面的数字交换所以是n-1
   if (a[k]>a[k+1]){
      temp=a[k+1];
      a[k+1]=a[k];
      a[k]=temp;
    }
}
for (int c:a){
            System.out.println(c);
}
//结果是2 4 7 6 1 3 5 8

接下来做Step 2

        int a[]={7,2,4,8,6,1,3,5};
        int temp=0;//临时变量
        for (int j=0;j<a.length-1;j++){//由于内层循环完成一次就是冒泡出一位排完序的数所以只需要做n-1次就可以完成排序
           for (int k=0;k<a.length-1-j;k++){
                if (a[k]>a[k+1]){
                    temp=a[k+1];
                    a[k+1]=a[k];
                    a[k]=temp;
                }
            }
        }
        for (int c:a){//for each
            System.out.println(c);
        }
        //结果是12345678

该算法可以进行进一步优化。因为在数组无需排序时,内层循环的交换并不发生,所以可以设置一个标志位来测试是否还有排序必要。

        int a[]={5,1,2,3,4};
        int temp=0;
        int count=0;
        boolean flag=false;
        for (int j=0;j<a.length-1;j++){
            flag=false;
            for (int k=0;k<a.length-1-j;k++){
                if (a[k]>a[k+1]){
                    temp=a[k+1];
                    a[k+1]=a[k];
                    a[k]=temp;
                    flag=true;
                }
                count++;
            }
            if(!flag)
                break;
        }
        for (int c:a){
            System.out.println(c);
        }
        System.out.println(count);

相关文章

网友评论

      本文标题:冒泡排序

      本文链接:https://www.haomeiwen.com/subject/xwosektx.html