| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 149 人关注过本帖
标题:len-1-i,为什么要减i。减一不是也对吗
只看楼主 加入收藏
Ycx0721
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2021-10-15
结帖率:60%
收藏
 问题点数:0 回复次数:4 
len-1-i,为什么要减i。减一不是也对吗
#include <stdio.h>
void bubble_sort(int arr[], int len) {
    int i, j, temp;
    for (i = 0; i < len - 1; i++)
        for (j = 0; j < len - 1 - i; j++)//这一行有问题
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
}
int main() {
    int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
    int len = (int) sizeof(arr) / sizeof(*arr);
    bubble_sort(arr, len);
    int i;
    for (i = 0; i < len; i++)
        printf("%d ", arr[i]);
    return 0;
}
搜索更多相关主题的帖子: i++ int sizeof for temp 
3 天前 13:26
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:93
帖 子:981
专家分:5330
注 册:2010-3-16
收藏
得分:0 
循环是挑大的往后面放,-i是为了减少计算量。
不加-i每次都会遍历整个数组。
3 天前 14:08
Ycx0721
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2021-10-15
收藏
得分:0 
回复 2楼 apull
感谢感谢
3 天前 14:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:431
帖 子:8148
专家分:48040
注 册:2011-1-18
收藏
得分:0 
当 i == 0 时
for (j = 0; j < len-i; j++) 也就是 for( j=0; j<len; ++j )
当 j == len-1 时
if( arr[j] > arr[j+1] )  也就是 if( arr[len-1] > arr[len] )
arr[len] 越界了
3 天前 14:20
diycai
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:106
专家分:463
注 册:2021-5-18
收藏
得分:0 
为什么叫冒泡? 就因为每轮内部循环后, 都有一个期望值放在了正确的位置上。
例如4 3 2 1在第一轮后,最大的4已经放在了末尾。
第二轮, 4不需要再参与了, 只用比较前3个就可以了, 当然你非要参与也可以,就是多损失一些时间和能量罢了。

有-i,  if (arr[j] > arr[j + 1]) 这条指令的执行次数是 len*(len-1)/2次,
无-i,  if (arr[j] > arr[j + 1]) 这条指令的执行次数是 (len-1)*(len-1)次。

3 天前 14:22
快速回复:len-1-i,为什么要减i。减一不是也对吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.074723 second(s), 8 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved