冒泡排序法的理解

方便回忆:

冒泡排序法是先排序好最大的那个数字在数组最后面,再排倒数第二大的数字。。。以此类推。

void
 Bubble_Sort(int *num, int n)
{
    int i, j;
    for(i = 0; i < n; i++)                 //1
    {
        for(j = 0; i + j < n - 1; j++)    //2
        {
            if(num[j] > num[j + 1])      //3
            {
                int temp = num[j];
                num[j] = num[j + 1];
                num[j + 1] = temp;
            }
        }
    }
    return;
}


n是要排序的数字个数
以87, 12, 56, 45, 78这五个数字为例:
n=5
当i=0,j=0时,对比第一个(num[0])和第二个数字(num[1]),把大的排到后面。    (//3处)   12,87,56,45,78
然后j自加1,对比第二个(num[1])和第三个数字(num[2])                   12,56,87,45,78
j继续自加,以此类推                                     12,56,45,87,78
.。。                                            12,56,45,78,87

接下来i自加1,j重新回到0,即 //1 处开启第二轮循环。那么i自加1的意义,可以从 //2处的i+j<n-1 条件看出,相当于不对比数组最后一个数,为什么呢?因为在i=0的时候就已经把最大的数排序到数组最后了(num[4]),已经没必要将这个数字再进行对比

整个流程就相当于把最大的数字一一排序到数组最后,就像冒泡一样。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页