关闭

冒泡排序及其优化

标签: 冒泡排序
207人阅读 评论(0) 收藏 举报
分类:

冒泡排序的基本思路是(以升序为例):每次将相邻两个数字进行比较,将小的数字放在大的前边。例如已知六个数字为9,8,5,4,2,0,第一次现将最前边的9和8进行调换,其次再将9和5进行调换......如图(只进行了两趟交换)


如此进行下去,如果有n个数,就要进行n-1趟比较;在第一趟要进行n-1次交换,在第j次就要进行n-j次交换。

void bubble_sort(int *p,int sz)              //冒泡排序
{
    int i = 0;
    int temp = 0;
    for(i=0; i<sz-1; i++)
    {
        int j = 0;
        for(j=0; j<sz-i-1; j++)
        {
            if(*(p+j) > *(p+j+1))
            {
                temp = *(p+j);
                *(p+j) = *(p+j+1);
                *(p+j+1) = temp;
            }
        }          
    }
}


假设有一组数字:1 2 3 4 5 6 7 8 9 0,那么用上边的方法也是可以实现的,但是,对于前边9个数字来说它们已经是有序的了,如果还用这种方法就会使效率降低很多(假设有n个数),因此,在此基础上可以将代码优化——每趟比较时,如果相邻两个数字之间满足升序或者降序的要求,那就不在交换,如果不满足,就前后交换。
void bubble_sort(int *p,int sz)              //冒泡排序--优化
{
    int flag = 1;
    int i = 0;
    int temp = 0;
    for(i=0; i<sz-1; i++)
    {
        int j = 0;
        flag = 1;
        for(j=0; j<sz-i-1; j++)
        {
            if(*(p+j) > *(p+j+1))
            {
                temp = *(p+j);
                *(p+j) = *(p+j+1);
                *(p+j+1) = temp;
                flag = 0;
            }
        }          
        if(flag == 1)
        {
            return ;
        }
    }
}




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:47529次
    • 积分:1293
    • 等级:
    • 排名:千里之外
    • 原创:83篇
    • 转载:1篇
    • 译文:0篇
    • 评论:28条
    博客专栏
    最新评论