关于冒泡排序的改进

Posted wwhai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于冒泡排序的改进相关的知识,希望对你有一定的参考价值。

1、原始冒泡排序

/*冒泡排序后的顺序为从小到大*/

void Bubble_Sort(int *arr,int len)
    {
        int i,j,exchange;
        for(i=0;i<len-1;i++)
           for(j=0;j<len-i-1;j++)
              if(arr[j] > arr[j+1])
                {
                    exchange = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = exchange;
                }
}

 

2、改进的冒泡排序

/*冒泡排序后的顺序为从小到大*/

void Bubble_Sort(int *arr,int len)
{
    int i,j,exchange;
    bool flag = true; //增设标志位,判断是否已经完成排序
    for(i=0; i<len-1 && flag; i++)
       {
            flag = false;
            for(j=0;j<len-i-1;j++)
               if(arr[j] > arr[j+1])
                 { //如果本趟比较没有数据发生交换,说明排序已经完成
                   //则flag一直为false,从而退出循环,不再进行下一趟的比较
                      exchange = arr[j];
                      arr[j] = arr[j+1];
                      arr[j+1] = exchange;
                      flag = true;
                 }
      }
}

 

3、测试

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

/*将上面的函数放在这里*/

int main()
   {
        int num;
        printf("请输入排序的元素的个数:");
        scanf("%d",&num);

        int i;
        int *arr = (int *)malloc(num*sizeof(int));
        printf("请依次输入这%d个元素(必须为整数):",num);
        for(i=0;i<num;i++)
           scanf("%d",arr+i);

        printf("冒泡排序后的顺序:");
        Bubble_Sort(arr,num);
        for(i=0;i<num;i++)
           printf("%d ",arr[i]);
        printf(" ");

        free(arr);
        arr = 0;
        return 0;
}

 













































以上是关于关于冒泡排序的改进的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序的改进:鸡尾酒排序

冒泡排序改进版(java)

交换排序 —— 冒泡排序 + 改进

冒泡排序的改进

冒泡排序算法及改进

改进冒泡排序的运行时间分析