您的位置:

冒泡法排序c语言改进,c语言冒泡排序法

本文目录一览:

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语言

.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语言冒泡排序。

#includestdio.h

void main()

{

int a[10];

int i,j,t;

printf("input 10 numbers:\n");

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

scanf("%d",a[i]);

for(j=0;j9;j++) /*进行9次循环 实现9趟比较*/

for(i=0;i9-j;i++) /*在每一趟中进行9-j次比较*/

if(a[i]a[i+1]) /*相邻两个数比较,想降序只要改成a[i]a[i+1]*/

{

t=a[i];

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

a[i+1]=t;

}

printf("the sorted numbers:\n");

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

printf(" %d",a[i]);

}

扩展资料:

冒泡排序算法的运作

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

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

3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。

4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。

简单的表示

#include stdio.h

void swap(int *i, int *j)

{

int temp = *i;

*i = *j;

*j = temp;

}

int main()

{

int a[10] = {2,1,4,5,6,9,7,8,7,7};

int i,j;

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

{

for (j = 9; j i; j--)//从后往前冒泡

{

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

{

swap(a[j], a[j-1]);

}

}

}

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

{

printf("%d\n", a[i]);

}

return 0;

}

参考资料来源:冒泡排序-百度百科

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;

}