C语言冒泡排序法代码

Python014

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

冒泡排序每一趟排序把最大的放在最右边。

比如:

87 12 56 45 78

87和12交换:12 87 56 45 78

87和56交换:   56 87 45 78

87和45交换:      45 87 78

87和78交换:         78 87

到此第一趟排序结束,接下来的每一趟排序都是这样。

#include<stdio.h>

void Print(int *num, int n)

{

    int i

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

        printf("%d ", num[i])

    puts("\n")

    return

}

void Bubble_Sort(int *num, int n)

{

    int i, j

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

    {

        for(j = 0 i + j < n - 1 j++)

        {

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

            {

                int temp = num[j]

                num[j] = num[j + 1]

                num[j + 1] = temp

            }

            Print(num, n)

        }

    }

    return

}

int main()

{

    int num[8] = {87, 12, 56, 45, 78}

    Bubble_Sort(num, 5)

    return 0

}

冒泡排序法的具体实现方法是这样的,从数组的第一个元素`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

            }

        }

    }

选择排序:

void select_sort(int a[],int n)        //传入数组的要排序的元素个数

{int i,j,min,t

for(i=0i<n-1i++)

{  min=i     //min:当前最小值下标

for(j=i+1j<nj++)        //扫描余下的部分

if(a[min]>a[j])        //若有其它元素更小,就记录其下标

min=j

if(min!=i)        //保若最小值不在排序区首位,就换到首位

{t=a[min]a[min]=a[i]a[i]=t}

}

}

冒泡排序:

void bubble_sort(int a[], int n)        //传入数组的要排序的元素个数

{ int i, j, t

for (j=0j<n-1j++)        //n个元素比较n-1轮

for (i= 0i<n-1-ji++)   //比较相信的两个数

if(a[i]>a[i+1])          //若大小顺序不符,就交换

{t=a[i] a[i]=a[i+1]a[i+1]=t

}