[C语言] 冒泡排序法 - 详解

一.什么是冒泡排序法

冒泡排序是一种 较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的 元素 ,如果顺序错误就把他们交换过来。

二.对若干整数进行冒泡排序

为了让大家对冒泡排序有一个深入的了解,我们在这里以使用十个整数,进行冒泡排序为例。

1.主函数

首先,我们把主函数写好。

#include

int main()
{
//定义一个数组用来存放十个整数
	int arr[10] = { 1,2,6,4,7,8,5,9,11,-1 };
//计算出这个数组的元素个数
	int sz = sizeof(arr) / sizeof(arr[0]);
调用bubble_sort函数,进行冒泡排序
	bubble_sort(arr, sz);
//将排序后的数组打印
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

补充:关于数组传参的小细节

这里我们要注意,bubble_sort(arr, sz)中,传参时,我们写的是arr,表示将arr数组的首元素的地址传过去,而不是arr数组的内容。

数组名一般都是表示数组首元素的地址,但是,有两种情况除外。

1.sizeof(数组名) 这里表示整个数组。

2.&数组名  ,   这里也是表示整个数组。

2.bubble_sort函数

接下来我们开始写bubble_sort函数。bubble_sort函数接收数组首元素的地址,以及数组长度两个参数。因为我们对一系列的元素进行冒泡排序,我们肯定需要先找到这些元素在哪里,其次我们需要知道进行冒泡排序的范围,所以数组长度这个参数也是必要的。

//冒泡排序法

void bubble_sort(int arr[],int sz)
{
	int i = 0;
//for循环中的内容是一趟冒泡排序,一共要进行sz-1趟
	for (i = 0; i < sz - 1; i++)
	{
		int j = 0;
		int temp = 0;

		for (j = 0; j < sz - 1 - i; j++)
//j < sz -1 -i,这里 - i 的原因是,我们已经排序好的元素不需要再参与到冒泡排序中
		{
//进行一次比较排序,将相邻的两个数进行比较
//在第一次这里的for循环结束后,数组的最后一个元素就是数组中最大的数

			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

3.完整代码

#include

//冒泡排序法

void bubble_sort(int arr[],int sz)
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int j = 0;
		int temp = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
int main()
{
	int arr[10] = { 1,2,6,4,7,8,5,9,11,-1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);
	
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

4.运行结果

[C语言] 冒泡排序法 - 详解_第1张图片

三.qsort函数

补充:在库函数中,有qsort函数,可以直接用它来实现排序。如下:

void qsort(int* base, size_t num, size_t size, int (*compar) (const void*, const void*));

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