`
yyang900427
  • 浏览: 11251 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

冒泡排序

阅读更多
/** 
 * 依次比较相邻的两个个数,将小数放在前面,大数放在后面。即在第一
 * 趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2
 * 个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两
 * 个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最
 * 后。若一趟下来始终满足小数在前,则排序结束,否则记录不满足小数在
 * 前的数组最大位置,置为待排数组长度,然后重复上述过程,直到结束,冒
 * 泡排序的时间杂度为O(n) ~ O(n ^2)
 */

#include <stdio.h>

void bubble_sort(int array[], int n)
{
    int tmp, tlen;

    while(n)
    {
        tlen = 0;

        for(int i = 1; i < n; ++i)
        {
            if(array[i - 1] > array[i])
            {
                tlen = i;

                // 交换元素(swap)
                tmp = array[i];
                array[i] = array[i - 1];
                array[i - 1] = tmp;
            }
        }

        // 刷新待排数组长度
        n = tlen;
    }
}

main()
{
    int array[] = {-1, -1, -100, 100, 0, 10};
    bubble_sort(array, 6);
    for(int i = 0; i < 6; ++i)
        printf("%d ", array[i]);
}

运行结果: -100 -1 -1 0 10 100 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics