C语言冒泡排序法代码

Python09

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

            }

        }

    }

#include "stdio.h"

int main()

int a[10] 

int i, j, temp 

// 输入10个整型数据 

printf("Please input ten numbers: \n") 

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

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

// 排序 

for (i = 0 i < 9 i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后 

for (j = 0 j < 9 - i j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较 

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

temp = a[j] 

a[j] = a[j+1] 

a[j+1] = temp 

//在这也显示一下排序的过程

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

printf(" %d ", a[j]) 

printf("\n")

// 打印排序结果 

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

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

return 0 

}