冒泡排序(C语言)

冒泡排序

  • 一、冒泡排序的原理
  • 二、代码实现
  • 三、优化代码
  • 四、实现从小到大排序

一、冒泡排序的原理

冒泡排序:(Bubble sort)是一种基础的交换排序
对数组进行遍历,每次对相邻两个进行比较大小,若大的数值在前面则交换位置(升序),完成一趟遍历后数组中最大的数值到了数组的末尾位置,再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成

二、代码实现

void bubble_sort(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)//len-1(比较的轮数) 不用与自己比较,所以比的数就少一个		
    {
        for (int j = 0; j < len - 1 - i; j++)//len-1-i 是因为每一趟就会少一个数比较
        {
            if (arr[j] > arr[j + 1])//比较大小,交换位置
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

三、优化代码

如果一次遍历,没有数据进行交换,则证明数组已经排好了顺序,就不需要继续遍历

void bubble_sort(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        int flag = 0;//flag标识
        for (int j = 0; j < len - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = 1;//发生数据交换,置flag为1
            }
        }
        if (flag == 0)//若flag为0,则没有发生交换,跳出循环
        {
            break;
        }
    }
}

四、实现从小到大排序

输入10个数字并将其从小到大排

#include 

void bubble_sort(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        int flag = 0;
        for (int j = 0; j < len - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = 1;
            }
        }
        if (flag == 0)
        {
            break;
        }
    }
    for(int i=0;i<len;i++)
    {
        printf("%d ", arr[i]);
    }
}


int main()
{
    int arr[10];
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]);
    }
    bubble_sort(arr, 10);
	return 0;
}

结果
冒泡排序(C语言)_第1张图片

冒泡排序(C语言)_第2张图片

你可能感兴趣的:(c语言,排序算法,算法)