冒泡排序

我的代码执行环境:

操作系统:OS X Yosemite

python版本2.7.6

微信公众平台:今天做了没

冒泡排序_第1张图片


冒泡排序:

百度百科解释:

http://baike.baidu.com/view/254413.htm

我的理解:依次比较相依的两个数据,如果大小顺序不对,就交换这两个数据位置,而交换后,大的数据还会和后面相邻的数据继续比较,如果大小顺序不对,就继续交换位置,这样的一个结果就是,最大的元素会在一次循环过后,到达最后的位置。

再次循环时,最二大的元素会被移到倒数第二个位置。以此类推,所有大的元素都依次排好序了,那么就完成任务了。


下面是C语言的实现:

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

void bubble_sort(int *numbers, int len)
{
    int i, j, tmp;

    /* 这里len-1是因为当把len-1个最大元素都找出来放后面了,
     * 那么剩下那个就不用再排了 */
    for (i = 0; i < len - 1; i ++) {
        for (j = 0; j < len - 1 - i; j ++) {
            if (numbers[j] > numbers[j+1]) {
                tmp = numbers[j];
                numbers[j] = numbers[j+1];
                numbers[j+1] = tmp;
            }
        }
    }
}

int main(int argc, char *argv[])
{
    int numbers[10], i;

    srand(time(NULL));

    for (i = 0; i < 10; i ++) {
        numbers[i] = rand() % 100 + 1;
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }

    bubble_sort(numbers, 10);

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

    return 0;
}

这里其实还有改进的办法,因为在两两比较的时候,如果有一次循环中,没有进行过一次交换,那么说明,已经排好序了,所以可以加一个标识,来判断,可以提升算法的效率。

下面是Python的实现:

#coding:utf-8
import random

def bubble_sort(numbers):

    total = len(numbers)

    for i in range(0, total - 1):
        for j in range(0, total - 1 - i):
            if numbers[j] > numbers[j+1]:
                numbers[j], numbers[j+1] = numbers[j+1], numbers[j]

    return numbers;

#生成数值列表
numbers = range(1, 20)
#打乱列表顺序
random.shuffle(numbers)
print numbers
print bubble_sort(numbers)



你可能感兴趣的:(冒泡排序,C实现,Python实现)