编写一个冒泡排序(升序)

冒泡排序就是前一个与后一个比较,若前一个大于后一个则进行交换,排序一轮将最大的数换到最后,直到所有数字按顺序进行排列

例如:对5, 3, 2, 4, 1进行冒泡排序,升序

第一轮:
3, 5, 2, 4, 1(5、3比较)
3, 2, 5, 4, 1(5、2比较)
3, 2, 4, 5, 1(5、4比较)
3, 2, 4, 1, 5(5、1比较)
第一轮结束将最大的数5换到了最后一位

第二轮:
2, 3, 4, 1, 5(3、2比较)
2, 3, 4, 1, 5(3、4比较)
2, 3, 1, 4, 5(4、1比较)
2, 3, 1, 4, 5(4、5比较)
第二轮结束将第二大数4换到了倒数第二位

第三轮:
2, 3, 1, 4, 5(2、3比较)
2, 1, 3, 4, 5(3、1比较)
2, 1, 3, 4, 5(3、4比较)
2, 1, 3, 4, 5(4、5比较)
第三轮结束将第三大数3换到了倒数第三位

第四轮:
1, 2, 3, 4, 5(2、1比较)
1, 2, 3, 4, 5(2、3比较)
1, 2, 3, 4, 5(3、4比较)
1, 2, 3, 4, 5(4、5比较)
第四轮结束将第四大数2换到了倒数第四位

代码实现

#include <stdio.h>

void BubbleSort(int arr[], int num)
{
	int i = 0;
	int j = 0;
	int A = 0;
	for (i = 0; i < num - 1; i++)  //要进行num-1轮冒泡排序
	{
		for (j = 0; j < num - 1; j++)  //每一轮进行num-1次排序
		{
			if (arr[j]>arr[j + 1])  //左右两个数进行比较
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				A = 1; //若进行了交换则A会从0变成1
			}
		}
		if (A == 0)  //若A没有变成1意味着数组原本就是升序且是有序的,就不用进行排序直接输出
		{
			break;
		}
	}

}

void Show(int arr[], int num)  //将数组展示一遍
{
	int i = 0;
	for (i = 0; i < num; i++)  //将数组遍历打印
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = { 3, 2, 5, 6, 4, 9, 1, 7, 5, 3, 1, 2, 0 };
	int num = sizeof(arr) / sizeof(arr[0]);
	printf("原顺序是:");
	Show(arr, num);  //展示原本的顺序
	BubbleSort(arr,num);  //进行冒泡排序
	printf("交换后是:");  //展示排序后的数组
	Show(arr, num);
	return 0;
}

结果展示
在这里插入图片描述


版权声明:本文为LCW0102原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。