冒泡排序--思路+代码

冒泡排序:

1)冒泡排序介绍:
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行,直到没有再需要交换的数,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

2) 冒泡排序 思路:
比较两个相邻的下标对应的元素,如果符合条件就交换位置(最值出现在最后位) ;
每一轮比较,需要比较的数列都会减少/变化,因为每一轮冒泡上浮出来的数已经不需要比了。

3)冒泡排序的平均时间复杂度是O(n²)。

代码:

package maopaopaixu;

/**
 * @author:张永辉;
 * @date: 2020/3/16; 8:41
 * todo: 冒泡排序:
 *      1. 每一层内循环,上浮出来一个当前数组中最小的元素;
 *      2. 多轮内循环结束后,排序结束;
 */
public class MaoPao2 {
    public static void main(String[] args) {
//        一,定义数组:
        int[] arr = {23,54,65,3,5,2,87,33,345,435,11,325,555,121,346,0,20,49,17};

//        二,定义一个临时变量,用来后边交换元素顺序,作中间值;
        int temp = 0;

//        三,开始排序:
//        1)外循环:用来控制内循环的轮数
        for (int i = 0; i < arr.length; i++) {

//            2)内循环:用来每次上浮出来一个当前数组中最小的数:
//                     arr.length-i,是因为每一轮内循环比较之后,已经上浮出来的数已经不需要再参与比较了,所以参与排序的数组长度应为:原数组长度-比较过的内循环轮数;
//                     arr.length-i-1,因为下边有个arr[j+1],所以-1是为了防止数组越界;
            for (int j = 0; j < arr.length-i-1; j++) {

//                2.1)交换元素顺序:
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }

        }

        for (int i : arr) {
            System.out.print(i+"----");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
冒泡排序是一种简单的排序算法,其基本思路是不断比较相邻的两个数,如果前一个数比后一个数大,则交换这两个数的位置,这样一趟下来,最大的数就会被交换到最后面。然后继续进行下一轮比较,直到所有数都排好序。 冒泡排序的c语言程序设计思路如下: 1. 定义一个数组,用于存放需要排序的数。 2. 根据冒泡排序的基本思路,需要进行多轮比较和交换操作,因此需要使用一个循环嵌套来实现。 3. 外层循环控制比较和交换的轮数,内层循环控制每一轮的比较和交换次数。 4. 在内层循环中,依次比较相邻的两个数,如果前一个数比后一个数大,则交换它们的位置。 5. 内层循环结束后,最大的数就会被交换到数组的最后面,因此在下一轮比较中,可以排除已经排好序的数,即将内层循环的比较次数减1。 6. 外层循环结束后,数组中的数就按从小到大的顺序排好了。 下面是一个示例代码: ``` void bubble_sort(int arr[], int n) { int i, j, temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 在这个示例代码中,使用了两层循环,外层循环控制比较和交换的轮数,内层循环控制每一轮的比较和交换次数。在内层循环中,如果前一个数比后一个数大,则进行交换操作。最终,数组中的数就按从小到大的顺序排好了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值