C语言冒泡排序法代码

Python017

C语言冒泡排序法代码,第1张

冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中。“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。这里以从小到大排序为例进行讲解。基本思想及举例说明

冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较就,选出最大的数;经过第2轮比较,就选出次大的数,以此类推。下面以对 3 2 4 1 进行冒泡排序说明。

1.这个算法用rand函数产生新的要排序的数据,与已有的有序数列中的数据依次比较,如果遇到比他大的数据,就从该数据开始,一直交换到末尾,达到一个插入的效果。从而形成有序的数列。

2.此外,只用rand函数并不能达到真正随机的效果。如果要实现真正随机的效果,还要配合srand函数才行。

3.具体代码如下:#include "stdio.h"#include "stdlib.h"void main(){int a[10],temp,rprintf("请输入一个种子\n")scanf("%d",&r)srand(r)for(int i=0i<9i++) 。

冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`arr[n],arr[n+1]`),如果前面的数大于后面的数(`arr[n] >arr[n+1]`),那么交换两个元素的位置,把大的数往后移动。这样依次经过一轮比较以后,最大的数将会被交换到最后的位置(arr[n-1])。

C语言实现Bubblesort:

void bubblesort(int a[], int m)

    {

        int i,j

        int tmp

        int flag = 0  //设定标志,如果第一次循环比较时没有发生交换,则说明数组是升序排序,不用排序,提前结束循环。

        for(i = 0 i < m i++)  //外层循环控制循环次数

        {

            for(j = 0 j < m-1-i j++)    //内层循环控制每次循环里比较的次数。

            {

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

                {

                    tmp = a[j]

                    a[j] = a[j+1]

                    a[j+1] = tmp

                    flag = 1

                }

            }

    

            if(0 == flag)

            {

                printf("No Sort\n")

                break

            }

            }

    }

选择排序法的过程是,通**过比较,选择出每一轮中最值元素,然后把他和这一轮中最最前面的元素交换**,所以这个算法关键是要记录每次比较的结果,即每次比较后最值位置(下标)。

C语言实现(Selectionsort)

void selectionsort(int a[],int m)

    {

        int i,j

        int k

        int tmp

        for(i = 0 i < m-1 i++)//控制循环次数,n个数需要n-1次循环

        {

            k = i

            for(j = i+1 j < m  j++)

            {

                if(a[j] < a[k])

                    k = j

            }

            //i不等于k是就证明a[i]不是最小的,

            //i等于k时证明a[i]就是本轮比较过程中最小的值

            if(i != k)

            {

                tmp = a[i]

                a[i] = a[k]

                a[k] = tmp

            }

        }

    }

#include<stdio.h>

void main()

{

int a[10]

int i,j,t

printf("input 10 numbers:\n")

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

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

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

for(i=0i<9-ji++) /*在每一趟中进行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=0i<10i++)

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 = 0i <10i++)

{

for (j = 9j >ij--)//从后往前冒泡

{

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

{

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

}

}

}

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

{

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

}

return 0

}

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