冒泡排序双重for循环的意思

发布于 2022-09-13 01:07:48 字数 737 浏览 16 评论 0

    public static void main(String[] args) {
        int[] arr = {11,9,13,26,24,35,46};
        int temp ;
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]<arr[j+1]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for(int n:arr) {
            System.out.print("   "+n);
        }

    }

请各位前辈帮我解释一下

for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-i-1;j++){

这里为何外层循环条件是i<arr.length-1 ,而内层循环条件是j<arr.length-i-1 , i和j能理解,只是不明白为何是arr.length-1,和arr.length-i-1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泡沫很甜 2022-09-20 01:07:48

一切都只是为了让冒出来的不在参与循环。先来说说意思

  • arr.length-1 这个不用多说吧,下标是从0开始的。而数量是从1开始的。不用= 是因为一个不用比较。
  • arr.length-i-1 这是为了切除已经冒泡成功的元素。i是在逐渐递增的,所以它是在逐渐减少,就像从后面向前面移动。不用等于是因为下面有j+1

这么写可能容易理解点。

    private static void bubbleSort(int[] arr) {
        for (int i = arr.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
千里故人稀 2022-09-20 01:07:48

arr.length-1 外面这层比较次数,最后只剩下数组第一位不需要比较
arr.length-i-1 里面这层是j和j+1相邻对比,所以j取数组最后一位的前一位

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文