2020-11-18

C语言中冒泡排序

分享一些关于C语言的算法,冒泡排序,这个是C语言中最常用的算法之一。主要采用的是相邻数两两进行比较的思想。如果后一个比前一个大或者小,则将其调换位置,直至所有的数都比较完。如果给定一个大小为n的数组,那么需要比较n-1趟,每一趟比较n-1-i次 ,i 表示上次循环中已经比较完的下标。写两个循环判断,如需交换则进行交换,如果不需要交换则进行下两个数的比较,直到所有的数比较完。最后,用一个循环将排序完成后的数全部输出。

代码如下:

#include <stdio.h>
void bubble_sort(int arr[], int sz)
{
    //确定冒泡排序的趟数
    int i = 0;
	for (i = 0; i <= sz - 1; i++)
	{
	    int flag = 1;//假设这一趟要排序的数据已经有序	
		int j = 0;	
		for (j = 0; j <= sz - 1 - i; j++)
		{	
			if (arr[j] > arr[j + 1])
			{	       
				int tmp = arr[j];	
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				flag = 0;//本趟排序的数据其实不完全有序		
			}	
		}	
		if (flag == 1)	
		{	
			break;		
		}	
	}
}
int main()
{
	int arr[] = { 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);//冒泡排序函数
	for (i = 0; i < sz; i++)
	{
	    printf("%d ", arr[i]);
	}
    return 0;
}

结果如图
在这里插入图片描述

结论:
冒泡排序就是相邻两个数相比较,大数就沉底(或者小数上浮的过程),总共进行了n-1次比较和交换。

编译环境:Microsoft Visual Studio 2019