码迷,mamicode.com
首页 > 编程语言 > 详细

冒泡算法学习记录

时间:2015-03-17 14:27:37      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

bubblesort.c这是维基百科上的说明,很详细

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
    int arr[10];
    srand(time(NULL));
    int i;

    for (i = 0; i < 10; i ++)
        arr[i] = rand() % 100;

    int j;
    int tmp;
    int sign;

    for (i = 0; i < 10 - 1; i ++) {
        sign = 1;
        for (j = 0; j < 10 - 1 - i; j ++) {
            if (arr[j] > arr[j+1]) {
                tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
                sign = 0;
            }
        }
        if (sign == 1)
            break;
    }

    for (i = 0; i < 10; i ++)
        printf("arr[%d] = %d\n", i, arr[i]);

    return 0;
}


冒泡排序有两个循环,最里面的循环的意思:

先说进行完一次内循环的效果,就是,找出了剩下所有元素中最大的,放在了最后面。

这个最大怎么找呢,就是j从0开始到10 - 1 - i,两个两个的逐渐比较,arr[j] > arr[j+1]这样,j每次加上,这样就是

一个数会比较两次,一次是在arr[j+1]的位置上,一次是在arr[j]的位置上,因为j++了。如果符合条件就互换位置。


进行一次内循环就会有一个元素找到了自己的位置,所以在进行下次循环的时候就不用再管他了,所以内层循环是10 - 1- i,

每次少一个元素,这样,就是外层那个循环的次数了,10 - 1。好比这里10个元素,为什么外层循环是9次呢?

因为你排好倒数第二个了,倒数第一个肯定就是那个位置了。


然后就是里面的sign的作用了。如果一个内循环,一次都没有交换数据,说明这个已经是排好序了,根本不用再继续了,

所以弄这么个东西了判断一下。

 







冒泡算法学习记录

标签:

原文地址:http://my.oschina.net/bxxfighting/blog/387890

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!