您的位置:

c语言冒泡改进,c语言冒泡排序函数

本文目录一览:

c语言 冒泡法是什么啊

冒泡法是排序的一种方法,冒泡法和冒泡排序实是一个定义.之所以叫冒泡法,即是像在水中的气泡一样,在一轮两数比较之后将最小(或最大的数字)排在一列数的左边(当然右边也行,总之是一边).然后排开这个数,经过N-2排开之后,整列数的大小就是按顺序来的.

c语言编程改进冒泡排序,让冒泡排序一旦排好序就停止循环,提高程序的效率?

#includestdio.h

void bubble_sort_1(int a[],int n)

{ int i,j,x,flag=1;

j=0;

while (flag) // 存在交换,进入循环

{ flag=0; // 初始化,不存在交换

for(i=n-2;i=j;i--)

if(a[i]a[i+1])

{ x=a[i]; a[i]=a[i+1]; a[i+1]=x;

flag=1; // 发现交换,说明无序

}

j++;

}

}

int main(){

}

C语言编程:改进冒泡排序程序,使其当数据已经有序时,直接结束排序过程。请给出运算结果。

#include stdio.h

#include stdlib.h

void Bubble(int *a,int n)  //对n个整数从小到大排序

{int i,j,t,k;

 for(i=0;in-1;i++)

 {k=1;

  for(j=0;jn-1-i;j++)

    if(a[j]a[j+1])

    {k=0;t=a[j];a[j]=a[j+1];a[j+1]=t;}

  if(k)break;  

 }

}

int main()

{int m,i;

 scanf("%d",m);

 int *p=(int *)calloc(m,sizeof(int));

 for(i=0;im;i++)

   scanf("%d",p+i);

 Bubble(p,m);

 for(i=0;im;i++)  

   printf("%d ",*(p+i));

return 0;

}

优化的冒泡排序c语言

.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px} 排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。以下是冒泡排序算法:

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来

说并没有什么太大作用。 1. 算法步骤

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2. 动图演示

3. 什么时候最快

当输入的数据已经是正序时(都已经是正序了,我还要你冒泡排序有何用啊)。

4. 什么时候最慢

当输入的数据是反序时(写一个 for 循环反序输出数据不就行了,干嘛要用你冒泡排序呢,我是闲的吗)。 5. JavaScript 代码实现 实例 function bubbleSort ( arr ) {

    var len = arr. length ;

    for ( var i = 0 ; i arr [ j+ 1 ] :

                arr [ j ] , arr [ j + 1 ] = arr [ j + 1 ] , arr [ j ]

    return arr

7. Go 代码实现 实例 func bubbleSort ( arr [] int ) [] int {

        length := len ( arr )

        for i := 0 ; i length ; i ++ {

                for j := 0 ; j length - 1 - i ; j ++ {

                        if arr [ j ] arr [ j + 1 ] {

                                arr [ j ], arr [ j + 1 ] = arr [ j + 1 ], arr [ j ]

                        }

                }

        }

        return arr

}

8. Java 代码实现 实例 public class BubbleSort implements IArraySort {

    @Override

    public int [ ] sort ( int [ ] sourceArray ) throws Exception {

        // 对 arr 进行拷贝,不改变参数内容

        int [ ] arr = Arrays . copyOf ( sourceArray, sourceArray. length ) ;

        for ( int i = 1 ; i

C语言的冒泡算法改进

flag=FALSE; /*把flag初始化为false*/

for(j=L-length-1;j=i;j--)

{

if(L-r[j]L-r[j+1])

{

swap(L,j,j+1); /*交换L-r[j]与L-r[j+1]的值*/

flag=TURE; /*如果有数据交换,则flag变为ture*/

}

}

把flag初始化为false,如果有数据交换,则flag变为ture; 反之就是 没有数据交换。

就是说数据已经是 排序完毕了, 这样 length flag - flag = false,就是数据已经是 排序完毕,可以退出循环了。

C语言中冒泡法的改进问题

swap变量的设立是检查

上一轮j的循环中是否存在前面一个数比后面一个数小而进行调换的情况存在.

假如不存在就是排序已经完成.可以不用再使i加1来检测了.

比如像一开始已经排好序的队列它就直接退出而不用每次都检查了.

你可以试着用单步调试的形式来仔细看看swap变量的作用.